Python中奇怪的前导字符utf8/utf16编码

2024-10-02 22:35:49 发布

您现在位置: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')

输出示例:

^{pr2}$

我哪里做错了,我想不通。我不想把UTF-16转换回UTF-8,保持UTF-16格式对我来说很重要。在

更新:感谢@tripleee,我的问题的解决方案是定义编码UTF-16le或UTF-16be。再次感谢您的时间和努力。在

提前感谢大家的时间和努力。在


Tags: 示例编码return格式字符utfencodepattern
1条回答
网友
1楼 · 发布于 2024-10-02 22:35:49

这个问题的答案是由@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')

输出示例:

^{pr2}$

相关问题 更多 >