在python中终端上没有显示西班牙语字符

2024-04-23 21:03:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python从NLTK下载了西班牙语文本

spanish_sents=nltk.corpus.floresta.sents()

当在终端打印句子时,相应的西班牙语字符 未渲染。例如,打印spanish_sents[1]会产生类似u'\xe9'的字符,如果我使用utf-8对其进行编码,如

^{pr2}$

它产生'\xc3\xa9'并用拉丁语3编码

print [x.encode("latin3") for x in sapnish_sents[1]] 

它产生'\xe9'

如何配置终端以打印这些点的字形?谢谢


Tags: 文本终端编码corpus字符utf句子nltk
3条回答

只是一个开头的话,拉丁语3或ISO-8859-3确实表示为南欧语,但它的目的是涵盖土耳其语、马耳他语和世界语。西班牙语更常用拉丁语1(ISO-8859-1或西欧语)或拉丁语9(ISO-8859-15)编码。在

我可以确认字母é具有unicode代码点U+00E9,并且在Latin1和Latin3中都表示为'\xe9'。它在UTF8中被编码为'\xc3\xc9',所以所有的转换都是正确的。在

但真正的问题是如何配置我的终端?如果不知道终端是什么,很难回答。。。在

  • 如果你认为没有重音符号就不能用了
  • 如果使用Windows控制台,则声明代码页1252(非常接近Latin1):chcp 1252并使用Latin1编码(或者更好的'cp1252'
  • 如果您在Linux或任何其他Unix或Unix上使用xterm(或任何派生版本),请使用export LANG=en_US.UTF8声明一个utf8字符集(如果您不喜欢美式英语,请选择您自己的语言,这里有趣的部分是.UTF8)并使用utf8编码-或者声明一个iso-8859-1字符集(export LANG=en_US.ISO-8859-1)并使用拉丁1编码

我猜有一些事情发生了。首先,您要迭代一个str(是不是一个完整的条目?打印时会发生什么)。第二,您没有得到完整的字符,因为您正在迭代一个str(unicode字符比ASCII字符占用更多的“空间”,所以对单个索引进行寻址看起来会很奇怪)。第三,你试图encode,而你可能是想decode。在

试试这个:

 print sapnish_sents[1].decode('utf-8')

我只是在我的终端上运行了以下内容以帮助提供上下文:

^{pr2}$

您所看到的是字符串的表示形式,因为打印列表仅用于调试目的。在

要打印列表,请使用.join

print ', '.join(sapnish_sents[1])

相关问题 更多 >