中文字元占用位元組數在不同編碼方式下的區別

2021-07-22 19:01:50 字數 463 閱讀 1117

一次腦洞大開,想寫乙個隨機生成中文瑪麗蘇名字的php小指令碼,需要從檔案中逐一讀取中文字元。

本來想說用fgetc()乙個乙個讀取字元,後來突然發現fgetc()是一次讀取乙個位元組,對於英文本元來說沒有問題,但是對於中文字元,每個字元占用兩個位元組,這樣就行不通了,顯示了就會亂碼,後來想到當年做c語言課程設計的時候讀取中文檔案都是用的fread(),就拿fread一試,fread($handle,」2」),本以為這樣就可以了,卻驚訝地發現這樣依然是亂碼,百思不得其解,這麼多年,c語言教程上,老師說,學長說的都是乙個中文字元是兩個位元組,為啥一次讀取兩個位元組仍然是亂碼呢。。。

看來,還是小平同志說的好啊,實踐是檢驗真理的唯一標準,光聽人說,光看書是不夠的,還是要去動手實踐啊

ps:還有乙個問題,就是如果中文和英文混雜在一起,想從一大段字元中(有中文也有英文)隨機讀取乙個字元,迴圈到要隨機讀取的位置,怎樣判斷要讀的是英文本元(乙個位元組)還是中文字元(2-4)個位元組呢?

占用位元組數求法

字串占用位元組數 ansi char szstr abc 占用位元組數求法 sizeof szstr char psz defgh 占用位元組數求法 strlen psz sizeof char unicode wchar t szwstr l abc 占用位元組數求法 sizeof szwstr ...

Oracle 漢字占用位元組數

在oracle中乙個字元特別是中文字元佔幾個位元組是與字符集有關的。比如gbk,漢字就會佔兩個位元組,英文1個 如果是utf 8,漢字一般佔3個位元組,英文還是1個。但是一般情況下,我們都認為是兩個位元組處理,因為oracle安裝時候預設我們都選擇gbk的編碼格式,但是我們在頁面做輸入字串長度的校驗...

List與陣列占用位元組數

想看一下list序列化後占用多少個 位元組,測試程式如下 public static void main string args throws ioexception system.out.println 元素數 list.size bytearrayoutputstream baos new by...