栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python字符串解码问题

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python字符串解码问题

这是正在发生的事情:

  • sampleString是一个字节字符串(经cp1255编码)
  • sampleString.depre("cp1255")
    将字节字符串解码(解码== bytes-> unipre字符串)为unipre字符串
  • print sampleString.depre("cp1255")
    尝试将unipre字符串打印到stdout。打印必须 unipre字符串进行 编码 才能做到这一点(enpre == unipre字符串->字节)。您所看到的错误意味着python打印语句无法将给定的unipre字符串写入控制台的编码。
    sys.stdout.encoding
    是终端的编码。

因此,问题在于您的控制台不支持这些字符。您应该能够调整控制台以使用其他编码。具体操作方法取决于您的操作系统和终端程序。

另一种方法是手动指定要使用的编码:

print sampleString.depre("cp1255").enpre("utf-8")

您可以尝试使用的简单测试程序:

import sysprint sys.stdout.encodingsamplestring = 'xe0xe1xe2xe3xe4'print samplestring.depre("cp1255").enpre(sys.argv[1])

在我的utf-8终端上:

$ python2.6 test.py utf-8UTF-8אבגדה$ python2.6 test.py latin1UTF-8Traceback (most recent call last):UnipreEnpreError: 'latin-1' prec can't enpre characters in position 0-4: ordinal not in range(256)$ python2.6 test.py asciiUTF-8Traceback (most recent call last):UnipreEnpreError: 'ascii' prec can't enpre characters in position 0-4: ordinal not in range(128)$ python2.6 test.py cp424UTF-8ABCDE$ python2.6 test.py iso8859_8UTF-8�����

latin-1和ascii的错误消息表示字符串中的unipre字符无法用这些编码表示。

注意最后两个。我将unipre字符串编码为cp424和iso8859_8编码(http://docs.python.org/library/precs.html#standard-
encodings
上列出的两种编码均支持希伯来字符)。由于希伯来语unipre字符在编码中具有表示形式,因此使用这些编码也不例外。

但是,当我的utf-8终端收到的编码格式与utf-8不同时,就会感到非常困惑。

在第一种情况下(cp424),我的UTF-8终端显示ABCDE,这意味着A的utf-8表示对应于ה的cp424表示,即字节值65表示utf-8中的A和cp424的ה。

enpre
方法具有一个可选的字符串参数,可用于指定当编码不能表示字符时将发生的情况(文档)。支持的策略是严格(默认),忽略,替换,xmlcharref和反斜杠替换。您甚至可以添加自己的自定义策略。

另一个测试程序(我在字符串周围打印引号,以更好地显示忽略行为):

import syssamplestring = 'xe0xe1xe2xe3xe4'print "'{0}'".format(samplestring.depre("cp1255").enpre(sys.argv[1],       sys.argv[2]))

结果:

$ python2.6 test.py latin1 strictTraceback (most recent call last):  File "test.py", line 4, in <module>    sys.argv[2]))UnipreEnpreError: 'latin-1' prec can't enpre characters in position 0-4: ordinal not in range(256)[/tmp]$ python2.6 test.py latin1 ignore''[/tmp]$ python2.6 test.py latin1 replace'?????'[/tmp]$ python2.6 test.py latin1 xmlcharrefreplace'&#1488;&#1489;&#1490;&#1491;&#1492;'[/tmp]$ python2.6 test.py latin1 backslashreplace'u05d0u05d1u05d2u05d3u05d4'


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/669219.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号