当前位置: 首页 > 面试题库 >

Python ascii utf Unicode

施自明
2023-03-14
问题内容

当我解析XML时p = xml.parsers.expat.ParserCreate()

<name>Fortuna D&#252;sseldorf</name>

字符解析事件处理程序包括u'\xfc'

怎么能u'\xfc'变成u'ü'

这是本文中的主要问题,其余仅显示对此的进一步(令人发指)的想法

Python unicode不会被破坏,因为它u'\xfc'会产生收益u'ü'吗?u’\
xfc’已经是一个unicode字符串,因此再次将其转换为unicode不起作用!将其转换为ASCII也不起作用。

我发现唯一可行的方法是:(这不是故意的,对吧?)

exec( 'print u\'' + 'Fortuna D\xfcsseldorf'.decode('8859') + u'\'')

用utf-8替换8859失败!这有什么意义呢?

另外,Python unicode
HOWTO有什么意义?-它仅提供失败示例,而不是说明如何进行实际操作中实际使用的转换(尤其是在这里提出类似问题的ppl猎犬)。

Unicode并不是魔术-为什么这里有那么多的ppl出现问题?

Unicode转换的根本问题很简单:

一个双向查找表’\ xFC’<->u’ü’

unicode( 'Fortuna D\xfcsseldorf' )

为什么Python的创建者认为显示错误而不是简单地产生此错误更好的原因是u'Fortuna Düsseldorf'什么?

还有为什么他们使它不可逆?

 >>> u'Fortuna Düsseldorf'.encode('utf-8')
 'Fortuna D\xc3\xbcsseldorf'
 >>> unicode('Fortuna D\xc3\xbcsseldorf','utf-8')
 u'Fortuna D\xfcsseldorf'

问题答案:

已经拥有了价值 。Python只是通过为您提供ASCII友好的表示形式来尝试简化 调试
。在解释器中回显值会为您提供调用repr()结果的结果。

换句话说,您正在将值的 表示
与值本身混淆。该表示旨在安全地复制和粘贴,而不必担心其他系统如何处理非ASCII代码点。因此,使用了Python字符串文字语法,所有不可打印的和非ASCII字符都由\xhh\uhhhh转义序列代替。将这些字符串粘贴回Python字符串或交互式Python会话中,将再现完全相同的值。

如此ü已被替换\xfc,因为这是带有DIAERESIS代码点的U +
00FC拉丁文小写字母U的 Unicode代码
点。

如果您的终端配置正确,则可以使用print,Python会将Unicode值编码到您的终端编解码器中,从而在终端显示中显示非ASCII字形:

>>> u'Fortuna Düsseldorf'
u'Fortuna D\xfcsseldorf'
>>> print u'Fortuna Düsseldorf'
Fortuna Düsseldorf

如果为终端配置了UTF-8,则还可以在显式编码后将UTF-8字节直接写入终端:

>>> u'Fortuna Düsseldorf'.encode('utf8')
'Fortuna D\xc3\xbcsseldorf'
>>> print u'Fortuna Düsseldorf'.encode('utf8')
Fortuna Düsseldorf

另一种方法是升级到Python
3;有repr()只使用针对没有可打印的字符的码点的转义序列(控制码,保留码点,替代物,等等;如果码点是不是一个空间,但在下降C*Z*一般类别,它被转义)。新ascii()功能repr()仍然为您提供Python
2的行为。



 类似资料:

相关阅读

相关文章

相关问答