[英]Weird leading characters utf-8/utf-16 encoding in Python
我寫了一個簡化版本來演示這個問題。 我正在以 utf-8 和 UTF-16 格式編碼特殊字符。
使用 utf-8 編碼沒有問題,當我使用 UTF-16 編碼時,我得到一些奇怪的前導字符。
我試圖刪除所有尾隨和前導字符,但錯誤仍然存在。
代碼示例:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import chardet
def myEncode(s, pattern):
try:
s.strip()
u = unicode(s, pattern)
print chardet.detect(u.encode(pattern, 'strict'))
return u.encode(pattern, 'strict')
except UnicodeDecodeError as err:
return "UnicodeDecodeError: ", err
except Exception as err:
return "ExceptionError: ", err
print myEncode(r"""Test !"#$%&'()*+-,./:;<=>?@[\]?_{@}~& € ÄÖÜ äöüß £¥§""",
'utf-8')
print myEncode(r"""Test !"#$%&'()*+-,./:;<=>?@[\]?_{@}~& € ÄÖÜ äöüß £¥§""",
'utf-16')
輸出示例:
{'confidence': 0.99, 'language': '', 'encoding': 'utf-8'}
Test !"#$%&'()*+-,./:;<=>?@[\]?_{@}~& € ÄÖÜ äöüß £¥§
{'confidence': 1.0, 'language': '', 'encoding': 'UTF-16'}
��Test !"#$%&'()*+-,./:;<=>?@[\]?_{@}~& € ÄÖÜ äöüß £¥§
我哪里出錯了,我想不通。 我不想將 UTF-16 轉換回 utf-8 對我來說保持 UTF-16 格式很重要。
更新:感謝@tripleee,我的問題的解決方案是定義編碼 UTF-16le 或 UTF-16be。 再次感謝您的時間和努力。
在此先感謝大家的時間和努力。
@tripleee 給出了問題的答案。
通過定義 utf-16le 或 utf-16be 而不是 utf-16 解決了問題。
解決方案示例:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import chardet
def myEncode(s, pattern):
try:
s.strip()
u = unicode(s, pattern)
print chardet.detect(u.encode(pattern, 'strict'))
return u.encode(pattern, 'strict')
except UnicodeDecodeError as err:
return "UnicodeDecodeError: ", err
except Exception as err:
return "ExceptionError: ", err
print myEncode(r"""Test !"#$%&'()*+-,./:;<=>?@[\]?_{@}~& € ÄÖÜ äöüß £¥§""",
'utf-8')
print myEncode(r"""Test !"#$%&'()*+-,./:;<=>?@[\]?_{@}~& € ÄÖÜ äöüß £¥§""",
'utf-16be')
輸出示例:
{'confidence': 0.99, 'language': '', 'encoding': 'utf-8'}
Test !"#$%&'()*+-,./:;<=>?@[\]?_{@}~& € ÄÖÜ äöüß £¥§
{'confidence': 0.99, 'language': '', 'encoding': 'utf-8'}
Test !"#$%&'()*+-,./:;<=>?@[\]?_{@}~& € ÄÖÜ äöüß £¥§
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.