首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的UTF-32

Python中的UTF-32
EN

Stack Overflow用户
提问于 2012-09-23 02:46:13
回答 2查看 9.3K关注 0票数 3

我无法显示theunicode项u'\u201d'。我在其他unicode项目上没有遇到问题。我使用了UTF-8,但是这个字符出现了,给我的代码带来了麻烦。我在解释器中尝试了不同的方法。但基本上是在哪里:

代码语言:javascript
复制
c = u'\u201d'

我得到了这个错误:

代码语言:javascript
复制
Traceback (most recent call last):
File "<pyshell#154>", line 1, in <module>
    c.decode('utf-32')
  File "C:\Python27\lib\encodings\utf_32.py", line 11, in decode
    return codecs.utf_32_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 0: ordinal not in range(128)

我需要在GUI中显示它,这样我就可以检查输出,然后将其存储为纯文本。Transform unicode string in python解释了一点,但是我仍然明显遗漏了一些东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-23 02:56:12

如果你得到了这个异常,那么你正试图在unicode字符串上调用.decode()。您应该只对字节字符串调用.decode(),并且只对unicode字符串调用.encode()。否则,解释器将首先使用默认编解码器(通常为'ascii')对字符串进行隐式编码或解码,这是个坏消息。

总的来说,我建议仔细阅读http://farmdev.com/talks/unicode/ ...

票数 6
EN

Stack Overflow用户

发布于 2012-09-23 03:22:50

如果你读过The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),你就会知道没有纯文本这回事。

但是,由于你坚持的目标和人们试图解释的目标之间似乎没有达成共识,我开始怀疑,“将符号转换为纯文本”是不是指“将Unicode右双引号(U+201D)替换为引号(U+0022),然后编码为ASCII码”。例如,如下所示:

代码语言:javascript
复制
In [45]: s = u"“curly quoted”"

In [46]: s
Out[46]: u'\u201ccurly quoted\u201d'

In [47]: print s
“curly quoted”

然后手动进行替换(搜索"unicode string sanitize“,你会发现更好的方法,包括对不同字符的更多”降级“):

代码语言:javascript
复制
In [51]: fixer = dict.fromkeys([0x201c, 0x201d], u'"')

In [52]: s.translate(fixer)
Out[52]: u'"curly quoted"'

In [53]: s.translate(fixer).encode("ascii", "replace")
Out[53]: '"curly quoted"' 

其中的“替换”将保护我们没有修复的任何东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12546705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档