gpt4 book ai didi

python 2.X : Why Can't I Properly Handle Unicode?

转载 作者:太空狗 更新时间:2023-10-29 21:35:20 26 4
gpt4 key购买 nike

我已经尝试了一段时间 Python 2.X 和 unicode。但我已经到了没有意义的地步。

第一个问题:

一些代码会清楚地解释我的意思。 txt变量在这里模拟pyqt4的翻译功能。它返回一个 QString。

# -*- coding: utf-8 -*-
from PyQt4 import QtCore
txt = QtCore.QString(u'può essere / sarà / 日本語')
txtUnicode1 = unicode(txt, errors='replace')
txtUnicode2 = unicode(txt)

当 print()-ing 两个 unicode 字符串时,我得到:

pu� essere / sar� / ???

può essere / sarà / 日本語

当然我可以通过使用 QString.__str__() 得到同样的东西,但我的意思是理解,所以为了争论我想知道:

  • 为什么 errors='replace' 替换所有编码字符它应该只在出现错误时才这样做?
  • 仅使用 unicode(QString) 来生成 QString 有问题吗转换成适合显示的 unicode 字符串?

第二个问题:

我正在尝试理解编码/解码。

>>> a = u'può essere / sarà / 日本'
>>> b = a.encode('utf-8')
>>> a
u'pu\xf2 essere / sar\xe0 / \u65e5\u672c'
>>> b
'pu\xc3\xb2 essere / sar\xc3\xa0 / \xe6\x97\xa5\xe6\x9c\xac'
>>> print a
può essere / sarà / 日本
>>> print b
può essere / sarà / 日本
  • print 是否解码 a 和 b?
  • Encoded-encoded UTF-8 应该是完全解码?我不应该打印编码字符串吗?
  • 编码和解码的 unicode 字符串有什么区别?

最佳答案

让我们启动旧的备用数据库 IDLE,看看我们是否可以复制您所看到的。

IDLE 1.1.4      
>>> a = u'può essere / sarà / 日本'

Unsupported characters in input
>>> a = u'pu\xf2 essere / sar\xe0 / \u65e5\u672c'
>>> b = a.encode('utf-8')
>>> a
u'pu\xf2 essere / sar\xe0 / \u65e5\u672c'
>>> b
'pu\xc3\xb2 essere / sar\xc3\xa0 / \xe6\x97\xa5\xe6\x9c\xac'
>>> print a
può essere / sarà / 日本
>>> print b
può essere / sarà / 日本

请注意,当我打印 b 时,我看到了不同的东西。这是因为我的 shell (IDLE) 不会将字节序列解释为 UTF-8 文本,而是使用我的平台字符编码 cp1252。

让我们仔细检查一下。

>>> import sys
>>> sys.stdout.encoding
'cp1252'

是的,这就是为什么我的行为与您不同。因为您的 sys.stdout.encoding 是 UTF-8。这就是为什么尽管 ab 是完全不同的值,但它们显示相同的原因;您的终端将字节解释为 UTF-8。

所以你可能想知道我们是否可以将我们的 unicode 字符序列 a 转换为可以在 IDLE 中显示的字节序列

>>> c = a.encode('cp1252') 

Traceback (most recent call last):
File "<pyshell#19>", line 1, in -toplevel-
c = a.encode('cp1252') #uses default encoding
File "C:\Python24\lib\encodings\cp1252.py", line 18, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 20-21: character maps to <undefined>

答案是否定的; cp1252不支持将汉字编码为字节。

关于 python 2.X : Why Can't I Properly Handle Unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9619606/

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