UTF-8是一種編碼,將總是使用可變數量的字節;多少取決於輸入文本的unicode碼點。
如果您需要可處理Unicode的固定長度編碼,請使用UTF-32(UTF-16仍然使用每碼點2或4字節)。
請注意,UTF-16和UTF-32編碼都包含Byte Order Mark代碼單元;一個初始的U+FEFF ZERO WIDTH NO-BREAK SPACE代碼點,它讓解碼器知道這些字節是以小的還是大的順序產生的。對於UTF-32,此代碼點將始終爲4個字節,因此您的輸出將爲4 +(4 *字符數)長。
可以通過添加-le
或-be
到編解碼器,在這種情況下,BOM省略編碼到特定的字節順序:
>>> 'Hello world'.encode('utf-32')
b'\xff\xfe\x00\x00H\x00\x00\x00e\x00\x00\x00l\x00\x00\x00l\x00\x00\x00o\x00\x00\x00 \x00\x00\x00w\x00\x00\x00o\x00\x00\x00r\x00\x00\x00l\x00\x00\x00d\x00\x00\x00'
>>> 'Hello world'.encode('utf-32-le')
b'H\x00\x00\x00e\x00\x00\x00l\x00\x00\x00l\x00\x00\x00o\x00\x00\x00 \x00\x00\x00w\x00\x00\x00o\x00\x00\x00r\x00\x00\x00l\x00\x00\x00d\x00\x00\x00'
>>> 'Hello world'.encode('utf-32-be')
b'\x00\x00\x00H\x00\x00\x00e\x00\x00\x00l\x00\x00\x00l\x00\x00\x00o\x00\x00\x00 \x00\x00\x00w\x00\x00\x00o\x00\x00\x00r\x00\x00\x00l\x00\x00\x00d'
你必須UTF-16,它編碼爲'2 * LEN(文本)+ 2個字節。 –
UTF-8是一種可變長度編碼。因此,不,世界上任何地方都沒有編碼*,這是固定長度和UTF-8。 –
我只是需要它有UTF-8中的所有字符 –