首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中打印希伯来语可以在eclipse中使用,但不能在shell中使用

在python中打印希伯来语可以在eclipse中使用,但不能在shell中使用
EN

Stack Overflow用户
提问于 2013-02-02 22:48:33
回答 2查看 1.2K关注 0票数 0

我有一些代码,可以将希伯来语文本文件的Unicode表示形式转换为希伯来语以供显示

例如:

代码语言:javascript
复制
f = open(sys.argv[1])
for line in f:
    print eval('u"' + line +'"')

当我在PyDev (eclipse)中运行它时,这很有趣,但是当我从命令行运行它时,我得到

代码语言:javascript
复制
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 9-10: ordinal not in range(256)

输入文件中的一个示例行是:

代码语言:javascript
复制
\u05d9\u05d5\u05dd

有什么问题吗?我该如何解决这个问题呢?

EN

回答 2

Stack Overflow用户

发布于 2013-02-02 22:55:09

不要使用eval();而是使用unicode_escape编解码器来解释该数据:

代码语言:javascript
复制
for line in f:
    line = line.decode('unicode_escape')

unicode_escape编码解释\uabcd字符序列的方式与解析源代码中的unicode文本时的方式相同:

代码语言:javascript
复制
>>> '\u05d9\u05d5\u05dd'.decode('unicode_escape')
u'\u05d9\u05d5\u05dd'

但是,您看到的异常不是由eval()语句引起的;我怀疑它是由尝试打印结果引起的。Python将尝试自动对unicode值进行编码,并将检测当前终端使用的编码。

您的Eclipse输出窗口使用与您的终端不同的编码;如果后者被配置为支持拉丁文-1,那么您将看到确切的异常,因为Python试图将希伯来语代码点编码为不支持这些编码的编码:

代码语言:javascript
复制
>>> u'\u05d9\u05d5\u05dd'.encode('latin1')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-2: ordinal not in range(256)

解决方案是重新配置您的终端(UTF-8将是一个很好的选择),或者不打印带有不能编码为unicode -1的代码点的拉丁值。

如果将输出从Python重定向到文件,则Python无法自动确定输出编码。在这种情况下,您可以使用PYTHONIOENCODING environment variable告诉Python对标准I/O使用哪种编码:

代码语言:javascript
复制
PYTHONIOENCODING=utf-8 python yourscript.py > outputfile.txt
票数 4
EN

Stack Overflow用户

发布于 2013-02-03 03:28:20

谢谢,这解决了我的问题。

代码语言:javascript
复制
line.decode('unicode_escape')

成功了。

Followup -现在可以工作了,但是如果我尝试将输出发送到一个文件:

代码语言:javascript
复制
python myScript.py > textfile.txt

文件本身具有以下错误:

代码语言:javascript
复制
'ascii' codec can't encode characters in position 42-44: ordinal not in range(128)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14663059

复制
相关文章

相似问题

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