Python 3.0b2无法映射"\u12b"

你好,
我正在使用Python 3.0b2.
我有一个XML文件,其中包含Unicode字符'\ u012b',
当解析时,会导致UnicenCodeError:
'Charmap'编解码器无法编码字符'\ u012b'位置26:
字符地图
即使我将此字符分配给参考
解释者:
Python 3.0b2(R30B2:65106,7月18日,2008年7月18日,18:44:17)[MSC V.1500 32 BIT
(英特尔)]
Win32
键入"帮助","版权","学分"或"许可"以获取更多信息.
Trackback(最近的最新电话):
文件" ",第1行,<模块>
文件" C:\ python30 \ lib \ io.py",第1428行,在写
b = encoder.encode(s)
文件" C:\ Python30 \ lib \ cododings \ cp437.py",第19行,在encode中
return codecs.charmap_encode(输入,self.errors,encoding_m ap)[0]
UnicodeCodeError:'CharMap'编解码器无法编码字符'\ u012b'
位置
1:字符地图
这是一个已知问题,还是我做错了什么?
这是指向XML文件的链接.角色在第600行,char 54 http://rubyquiz.com/songlibrary.xml.gz

# 回答1


Josh Logan Trackback(最近的最新电话):
文件" ",第1行,<模块>
文件" C:\ python30 \ lib \ io.py",第1428行,在写
b = encoder.encode(s)
文件" C:\ Python30 \ lib \ cododings \ cp437.py",第19行,在encode中
return codecs.charmap_encode(input,self.errors,encoding_m ap)[0] unicodeencodeError:'charmap'cocdec'cocdec'condode'\ u012b'inposition1:字符映射到是一个已知的问题,或者我在做这个问题有事吗?
两个都. u+012b是带有马克龙的拉丁较低案例i(i带有bar
点).该字符在8位字符集CP437中不存在
您正在尝试使用它.
如果您选择一个包括i-with-macron的8位字符集,则
将工作. UTF-8将是一个不错的选择.它在ISO-8859-10中.
- -
蒂姆·罗伯茨(Tim Roberts),ti@probo.com
Providenza&Boekelheide,Inc.
# 回答2


蒂姆·罗伯茨(Tim Roberts)写道:
Trackback(最近的最新调用):文件" ",第1行,<模块>文件" c:\ python30 \ lib \ io.py",第1428行,在Write B = Encoder.encoder.encode.encode(s)文件中"C:\Python30\lib\encodings\cp437.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_m ap)[0]UnicodeEncodeError: 'charmap' codec can't encode character '\ u012b'inposition1:字符映射到是一个已知问题,还是我做错了什么?

两个都. u+012b是带有马克龙的拉丁较低案例i(i带有bar
点).该字符在8位字符集CP437中不存在
您正在尝试使用它.
如果您选择一个包括i-with-macron的8位字符集,则
将工作. UTF-8将是一个不错的选择.它在ISO-8859-10中.
我怀疑OP'Chots'CP437.为什么即使在
默认编码是UTF-8吗?
在winxp上
'utf-8'
Trackback(最近的最新电话):
文件" ",第1行,<模块>
文件" C:\ Program Files \ Python30 \ Lib \ io.py",第1428行
b = e ncoder.encode(S)
文件" C:\ Program Files \ Python30 \ lib \ cododings \ cp437.py",第19行,in
编码
return codecs.charmap_encode(输入,self.errors,encoding_m ap)[0]
UnicodeCodeError:'CharMap'编解码器无法编码字符'\ u012b'
位置
1:字符地图
为了换句话说,如何选择"选择" UTF-8以显示屏幕?
使用空闲,显示功能正常.
空闲3.0b2
'ä«'#i macron
'utf-8'
我遇到这是一个不同的上下文,并在错误上提到了它
跟踪器,但是Windows解释器似乎在这里破裂.
我将在UTF-8中发送此信息,以便有望出现I-Macron.
tjr

# 回答3


特里·里迪(Terry Reedy)在2008年9月1日星期一02:27:54 -0400写道:
'utf-8'
Trackback(最近的最新电话):
文件" ",第1行,<模块>
文件" C:\ Program Files \ Python30 \ Lib \ io.py",第1428行
b = encoder.encode(s)
文件" C:\ Program Files \ Python30 \ lib \ cododings \ cp437.py",第19行,in
编码
return codecs.charmap_encode(输入,self.errors,encoding_m ap)[0]
UnicodeCodeError:'CharMap'编解码器无法编码字符'\ u012b'
位置
1:字符地图
很可能是因为Python发现终端期望CP437.
`sys.stdout.coding'说什么?
如果终端期望CP437,则显示UTF-8可能会提供一些
问题.
再见,
marc'blackjack'rintsch
# 回答4


在9月1日,8:19*am,Marc'Blackjack'Rintsch 很可能是因为Python发现终端期望CP437. *
`sys.stdout.coding'说什么?
如果终端期望CP437,则显示UTF-8可能会提供一些
问题.
再见,
* * * * MARC'二十一点'Rintsch
因此,这不是该程序的问题,而是我打印时的问题
出来.
sys.stdout.编码确实说CP437.
现在,当我不打印任何内容时,程序就会悬挂.我会尝试
再次让董事会知道结果.
感谢您的所有见解.
# 回答5


Marc'Blackjack'Rintsch写道:
'utf-8'
Trackback(最近的最新调用):文件" ",第1行,在 file" c:\ program Files \ Python30 \ lib \ io.py中,第1428行,在Write B = encoder.encoder.encode.encode( s)文件" C:\ Program Files \ Python30 \ lib \ cododings \ cp437.py",第19行,Incode return return codecs.charmap_encode(input,input,self.Errors,encoding_m ap)[0] t编码字符'\ u012b'inposition1:字符映射到

很可能是因为Python发现终端期望CP437.
`sys.stdout.coding'说什么?
命令提示符窗口中的解释器说CP437.
闲置的窗口说" CP1252",并且可以很好地处理角色.
鉴于Windows OS可以处理角色,为什么Python/命令
迅速限制输出?
字符闲置窗口无法显示(例如替代对)
显示为框.但是,如果我剪下'[] []'(4个字符),然后粘贴到
Firefox,我得到了3个字符. '[]'其中[]有一些数字而不是
空的.当 "基于Unicode"的每个窗口
Windows处理另一个子集.这是窗户的错还是
Python和Idle(这两个更受限制的Firefox)?
如果终端期望CP437,则显示UTF-8可能会提供一些
问题.
我的屏幕显示Windows告诉图形卡的任何内容
显示要显示的屏幕.在OpenOffice中,我可以选择一个Unicode字体
显示至少在基本语言平面(BMP)中的所有内容.
Terry Jan Reedy

# 回答6


特里·里迪(Terry Reedy)在2008年9月1日星期一14:25:01 -0400写道:
命令提示符窗口中的解释器说CP437.空闲窗口
说" CP1252",它可以很好地处理角色.考虑到Windows OS
可以处理角色,为什么Python/命令提示限制输出?
Windows命令提示符期望CP437,因为那是旧DOS
程序打印到它.
那是因为它不是"基于Unicode"的.这些之间的沟通
程序必须使用字节完成,因此发件人必须编码Unicode
编码接收器中的字符期望.
这是Nobodies的错.这仅仅是编码内容的工作方式.如果终端期望CP437,则显示UTF-8可能会产生一些问题.

我的屏幕显示Windows告诉图形卡的任何内容
显示要显示的屏幕.
但是终端获得字节,并期望它们为CP437编码
字符而不是UTF-8.因此,您无法发送任何Unicode角色
您想要,至少不是不更改终端的编码.
但是OOO内部与Unicode合作,因此没有与
此处涉及的外部程序.
再见,
marc'blackjack'rintsch

# 回答7


Marc'Blackjack'Rintsch写道:
首先,感谢您提供的信息.
grrr.解释器运行时,它将打开命令提示符窗口
python运行,窗户在Python退出时关闭,因此
没有其他程序.我认为无论如何都有
命令提示可以接受更好的东西.
Python 3也内部也使用Unicode,但我收集的CommanderPrompt是一个
外部程序用作快速替代编码普通窗口的替代品
例如,使用MFC.
------------------------------
我做了一些实验.
我在命令提示快捷键和cmd.exe之后添加了 /u标志
lucida控制台的字体(网络上的人们说处理Unicode).
我打开了提示窗口,输入了" CHCP 1252",与
闲置的.启动python3.
'CP1252'
Trackback(最近的最新电话):
文件" ",第1行,<模块>
文件" C:\ Program Files \ Python30 \ lib \ io.py",第1428行,in
b = encoder.encode(s)
文件" C:\ Program Files \ Python30 \ lib \ cododings \ cp1252.py",
与栅格字体选择相同.
CHCP 65001据说是UTF-8,可以禁用所有输出.也许
Python不将其识别为UTF-8的同义词.
闲置(带编码e 1252)上的同样,也给了i macron(顶部).所以
除了编码外,其他事情正在发生.
我第二次尝试,而是得到了"'\ u0 12b'"也没有错误.
我想,但是我关闭并以同样的方式再次尝试,众所周知,
但是有与以前相同的错误. CP65001也做到了,然后没有
工作. Python确实注意到代码页面更改.
tjr
# 回答8


特里·里迪(Terry Reedy)写道:
看来Python的Windows端口可能不是
将Win32控制台强加于Unicode模式或使用Unicode
蜜蜂. (如果这是正确的,则可能是窗户的剩菜
95/98/我的日子,我想...)

作为解决方法 - 暂时 - 您可能想尝试一些东西
与线程"更改(编解码)错误处理程序"中所述相似
对于Python 3.0"中的Stdout/stderr流.
其中描述的方法不会让您打印字符
在CodePage 437曲目之外 - 任何此类字符仍将
需要用其他东西代替 - 但至少这是
替代应该自动发生;即,您可以继续使用
普通print()函数正常方式 - 即使对于候选人
角色 - 您的程序将不再崩溃.
很高兴看到Python的合适的Unicode Win32控制台支持
当然,如果可能的话.
- -
Znark

标签: python

添加新评论