我写了一个简化版本来演示这个问题。我正在以 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 格式对我来说很重要。
Update:感谢@tripleee,我的问题的解决方案是定义编码 UTF-16le 或 UTF-16be。再次感谢您的时间和努力。
预先感谢大家的时间和精力。