我在latin1表中有一個字符串「Artîsté」。我使用C mysql連接器從表中獲取字符串。我將character_set_connection設置爲utf8。如何確定這是latin1還是utf8?
在它看起來像調試器:
"Art\xeest\xe9"
如果我打印十六進制值與輸出( 「%02X」,(無符號字符)A [1]);對於每個字符我得到
41 72 74 EE 73 74 E9
如何知道它是否是utf8或latin1?
我在latin1表中有一個字符串「Artîsté」。我使用C mysql連接器從表中獲取字符串。我將character_set_connection設置爲utf8。如何確定這是latin1還是utf8?
在它看起來像調試器:
"Art\xeest\xe9"
如果我打印十六進制值與輸出( 「%02X」,(無符號字符)A [1]);對於每個字符我得到
41 72 74 EE 73 74 E9
如何知道它是否是utf8或latin1?
如喲可以以UTF-8序列的the schema看可以有2種很大的可能性:
這是異8859編碼
41 72 74 *EE* 73 74 *E9*
單獨
只有2架同值字節> = 0x80的
ADD當心
要當心!即使您發現格式正確的UTF-8序列,您也無法區分它與ISO-8859字符組合!
\x74\xee\x73
不是有效的UTF-8序列,因爲UTF-8在設置最高位時永遠不會運行只有1個字節。所以在這兩者中,它必須是Latin-1。但是,如果您看到的字節是有效的UTF-8數據,那麼並不總是可以排除它可能是Latin-1,而這恰好也是有效的UTF-8。
的Latin-1確實有一些無效字節(ASCII控制字符0x00-0x1F
和未使用的範圍0x7f-0x9F
),所以有一些UTF-8字符串,你可以肯定不是Latin-1的。但根據我的經驗,將Windows CP1252錯誤地標記爲Latin-1已經很普遍,拒絕所有這些代碼點是相當無用的,除非您將另一個字符集轉換爲Latin-1,並且要嚴格要求什麼你輸出。 CP1252也有一些未使用的字節,但不是那麼多。
你說2個單字節,UTF8最多可以有4個?這是否像EEEE(4字節)? – joels 2011-12-21 20:37:49
對不起,不好的選擇,比我更正。第一個字節EE第二個字節E9但彼此分開 – 2011-12-21 20:52:15