2
我有UTF-8編碼的文本文件。我可以通過字符讀取它。每個字符可以是一個字節或多個字節。我怎麼知道一個字節重新存放的地方,並且它重新存儲了多於一個字節?如何將字符位置轉換爲UTF-8文件中的字節位置?
我有UTF-8編碼的文本文件。我可以通過字符讀取它。每個字符可以是一個字節或多個字節。我怎麼知道一個字節重新存放的地方,並且它重新存儲了多於一個字節?如何將字符位置轉換爲UTF-8文件中的字節位置?
在讀取char
s時計算字節數。
對於每個char c
:
if(c<128)
bytesCount++;
else if (c<2048)
bytesCount+=2;
else
bytesCount+=3;
參見encodeing定義wikipedia URF8
更大字符數目增加2或3是不夠的。 UTF-8代碼序列可以長達6個字節(並且爲單個抽象字符產生多個Java char值),低編號字符*可以用長字節序列而不是通常的短字符序列表示。 – Wyzard 2013-02-08 23:40:07
@Wyzard:除了UTF-8代碼序列長達4個字節這個事實之外,你的評論是絕對正確的。引用[Wikipedia](http://en.wikipedia.org/wiki/UTF-8):_ 2003年11月,UTF-8被RFC 3629限制爲以'U + 10FFFF'結尾,以便匹配UTF-16字符編碼。這刪除了所有5字節和6字節的序列,以及大約一半的4字節序列。[ – jlordo 2013-02-08 23:43:40
]這是正確的,但是對於高達65535的字符值不適用,只有java支持這一點[但可以隨意實現最多6字節編碼(見維基百科鏈接)] – MrSmith42 2013-02-08 23:43:49