gpt4 book ai didi

python - 转换为 unicode 的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-28 19:23:10 26 4
gpt4 key购买 nike

假设你有一个字符串

s = "C:\Users\Eric\Desktop\beeline.txt"

如果不是,你想转移到 Unicode。

return s if PY3 or type(s) is unicode else unicode(s, "unicode_escape")

如果字符串有可能包含\U(即用户目录),您可能会遇到 Unicode 解码错误。

UnicodeDecodeError: 'unicodeescape' codec can't decode bytes in position 3-4: truncated \UXXXXXXXX escape

像这样强制执行有什么问题吗:

return s if PY3 or type(s) is unicode else unicode(s.encode('string-escape'), "unicode_escape")

或者明确检查\U 是否存在,因为它是唯一的极端情况?

我希望代码适用于 python 2 和 3。

最佳答案

它适用于英语,但当面对实际的 unicode 示例时,强制翻译可能不会使用与默认情况下相同的编码,从而给您带来不愉快的错误。

我将您给定的代码包装在一个名为 assert_unicode 的函数中(将 is 替换为 isinstance),并对希伯来语文本(简单地说“你好”)进行了测试,检查一下:

In [1]: def assert_unicode(s):
return s if isinstance(s, unicode) else unicode(s, 'unicode_escape')

In [2]: assert_unicode(u'שלום')
Out[2]: u'\u05e9\u05dc\u05d5\u05dd'

In [3]: assert_unicode('שלום')
Out[3]: u'\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d'

你看到了吗?两者都返回一个 unicode 对象,但仍然有很多区别。如果您尝试打印或使用第二个示例,它可能会失败(例如,一个简单的打印对我来说失败了,我使用的是 console2,它对 unicode 非常友好)。

解决这个问题? 使用 utf-8。现在这是一个标准,如果您确保所有内容也都被视为 utf-8,那么它对于任何给定语言都应该像魅力一样工作:

In [4]: def assert_unicode(s):
return s if isinstance(s, unicode) else unicode(s, 'utf-8')

In [5]: assert_unicode(u'שלום')
Out[5]: u'\u05e9\u05dc\u05d5\u05dd'

In [6]: assert_unicode('שלום')
Out[6]: u'\u05e9\u05dc\u05d5\u05dd'

关于python - 转换为 unicode 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19952480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com