用户输入波斯语或阿拉伯语时如何在python中使用UTF-8
我的代码是获取一些用户的名字和他们的一些观点,并将它们作为表写入文本文件。例如: 19一些空间*|حمید 20家庭空间* 70someSpace* 14someSpace*| Hamid 我得到这个错误:用户输入波斯语或阿拉伯语时如何在python中使用UTF-8,python,python-2.7,utf-8,Python,Python 2.7,Utf 8,我的代码是获取一些用户的名字和他们的一些观点,并将它们作为表写入文本文件。例如: 19一些空间*|حمید 20家庭空间* 70someSpace* 14someSpace*| Hamid 我得到这个错误: UnicodeDecodeError Traceback (most recent call last) <ipython-input-10-a48ceb393d9a> in <module>() ---->
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-10-a48ceb393d9a> in <module>()
----> 1 my_table("grade",3)
<ipython-input-9-6a83996822a3> in my_table(STR, m)
14 while(i < m):
15 i +=1
---> 16 a = raw_input("Name: ").encode('utf-8')
17 b = raw_input("Grade")
18 f.write(roww(a,b))
C:\Users\Hamid\Anaconda2\lib\encodings\utf_8.pyc in decode(input, errors)
14
15 def decode(input, errors='strict'):
---> 16 return codecs.utf_8_decode(input, errors, True)
17
18 class IncrementalEncoder(codecs.IncrementalEncoder):
UnicodeDecodeError: 'utf8' codec can't decode byte 0xcd in position 0: invalid continuation byte
我无法用python解决关于utf-8的问题。我也找不到任何有用的答案 下面是一个简单的示例,演示如何读取/解码和编写阿拉伯语文本文件。正如Ilja已经指出的,这基本上取决于您的终端,当您从终端获得一个已经utf-8编码的字节码时,您实际上必须对其进行解码 在MacOSx上运行良好: 如果您运行此代码段并将其作为输入,它将正常工作
# -*- coding: utf-8 -*-
x = raw_input("test: ").decode("utf-8")
print x
f = open("testarabic.txt", "w")
f.write(x.encode("utf-8"))
f.close()
第一行-*-编码:utf-8-*-在您的情况下是不需要的,除非您的python文件中有一些静态文本
Windows上的解决方法
我刚刚在窗户上试了一下,正如你说的,我也开始好起来了?????字符,但我意识到windows命令行使用的是不同的编码。所以第一个问题是,如果您的命令行已经正确地显示了阿拉伯语字符,那么您可以通过在terminal中键入来确定它使用的是什么代码页
1获取终端的代码页
chcp
Active code page:1256
2使用终端中的活动代码对原始输入进行解码
x = raw_input("test: ").decode("1256")
如果windows上的命令行未正确显示阿拉伯语符号,可以通过键入windows命令行chcp 1256进行设置
你有没有在文件的最上面写上一行-*-编码:utf-8-*-呢?没有!我该怎么做呢?检查一下这篇文章,它应该包含你需要的所有信息:在这个特殊的情况下,把编码放在文件的顶部对你没有帮助。它只确定源文件本身的编码。你的问题是运行时问题。由于Python 2的工作原理,原始输入名称:。编码“utf-8”实际上等同于原始输入名称:。解码“utf-8”。编码“utf-8”后,您的输入字节似乎不包含utf-8编码文本。@Ilja Everilä我该怎么办?我运行了您的代码,得到了以下结果:UnicodeDecodeError:“utf8”编解码器无法解码位置0处的字节0xc7:无效的延续字节的奇怪,你在用什么终端?窗户?Linux?我使用Windows 7.1Hmm…那可能是Windows的东西…我目前没有Windows机器要测试…可能需要8个小时。这篇文章讨论了windwos+Farsi问题,但由于错误发生在解码级别,而不是在打印语句期间,我想可能不是这样。
chcp
Active code page:1256
x = raw_input("test: ").decode("1256")