Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用户输入波斯语或阿拉伯语时如何在python中使用UTF-8_Python_Python 2.7_Utf 8 - Fatal编程技术网

用户输入波斯语或阿拉伯语时如何在python中使用UTF-8

用户输入波斯语或阿拉伯语时如何在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>() ---->

我的代码是获取一些用户的名字和他们的一些观点,并将它们作为表写入文本文件。例如:

19一些空间*|حمید

20家庭空间*

70someSpace*

14someSpace*| Hamid

我得到这个错误:

    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")