Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.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 2.7。有没有比u';字符串';带重音的字符串?_Python_String_Python 2.7_Unicode - Fatal编程技术网

Python 2.7。有没有比u';字符串';带重音的字符串?

Python 2.7。有没有比u';字符串';带重音的字符串?,python,string,python-2.7,unicode,Python,String,Python 2.7,Unicode,这里是我的问题:我需要一个方法或函数,使相同的比u'字符串'。例如: > s1=u'Estás' > s1 >>u'Est\xe1s' > s2='Estás' > s2 >>'Est\xa0s' 然后我尝试将其转换为unicode >s2=unicode(s2,'latin-1') >s2 >>u'Est\xa0s' 您可以看到转义字符是不同的,如果我同时打印这两个字符 >print s1,s2 >>

这里是我的问题:我需要一个方法或函数,使相同的比u'字符串'。例如:

> s1=u'Estás'
> s1
>>u'Est\xe1s'

> s2='Estás'
> s2
>>'Est\xa0s'
然后我尝试将其转换为unicode

>s2=unicode(s2,'latin-1')
>s2
>>u'Est\xa0s'
您可以看到转义字符是不同的,如果我同时打印这两个字符

>print s1,s2
>>Estás Est s
在我的python脚本中,我从一些文件中获取字符串,我知道它们可能包含重音符号,因此我需要一种方法将它们转换为带有正确转义字符的unicode。有什么想法吗?Thx提前


PD:我知道Python3对此有一些解决方案,但我必须使用2.7,你的错误是认为你的ByTestString是用拉丁语1编码的。似乎没有什么好的理由这么想;更有可能是utf-8

还要注意的是,使用
x.decode(encoding)
而不是
unicode(x,encoding)
解码为unicode更为清晰

>>> s2.decode('utf-8')
u'Est\xe1s'

您的错误在于认为您的bytestring是用拉丁语1编码的。似乎没有什么好的理由这么想;更有可能是utf-8

还要注意的是,使用
x.decode(encoding)
而不是
unicode(x,encoding)
解码为unicode更为清晰

>>> s2.decode('utf-8')
u'Est\xe1s'

的unicode代码点是0xe1。作为
s2
输入的字符串在cp850中编码,其中
á
具有字节表示0xa0,而不是拉丁语-1。因此您必须使用正确的编码。

的unicode代码点为0xe1。作为
s2
输入的字符串在cp850中编码,其中
á
具有字节表示0xa0,而不是拉丁语-1。因此,您必须使用正确的编码。

问题是,尝试使用utf-8进行解码时,我得到一个回溯,表明位置3的字节无法解码。我认为您在使用unicode之后使用了decode,或者您声明了s2=u'Estás'>>>s2='Estás'>>>s2.decode('utf-8')回溯(最后一次调用):文件“”,第1行,在文件“C:\Python27\lib\encodings\utf_8.py”中,第16行,在decode return codecs.utf_decode中(输入,错误,True)UnicodeDecodeError:“utf8”编解码器无法解码第3位的字节0xa0:无效的s tart byteAs另一个Daniel说,看起来您的终端的编码是cp850。所以
s2.decode('cp850')
应该可以正常工作。问题是,尝试将decode与utf-8一起使用时,我得到一个回溯,表明位置3的字节无法解码。我认为您在使用unicode之后使用了decode,或者您声明了s2=u'Estás'>>>s2='Estás'>>>s2.decode('utf-8')回溯(最后一次调用):文件“”,第1行,在文件“C:\Python27\lib\encodings\utf_8.py”中,第16行,在decode return codecs.utf_decode中(输入,错误,True)UnicodeDecodeError:“utf8”编解码器无法解码第3位的字节0xa0:无效的s tart byteAs另一个Daniel说,看起来您的终端的编码是cp850。所以
s2.decode('cp850')
应该可以正常工作。谢谢。我不知道正确的编码。所有重音(我的意思是´、`、¨和^)的编码都是相同的吗?编码取决于终端、输入的文本或编写了显式文件的程序。确定。谢谢你的解决方案=)@Penneke,你可能在Windows上。命令提示符处的comand
chcp
将显示控制台编码。它不一定是
cp850
cp437
为该字符提供相同的编码。在Python
importsys中;sys.stdout.encoding
还将告诉您控制台编码。谢谢。我不知道正确的编码。所有重音(我的意思是´、`、¨和^)的编码都是相同的吗?编码取决于终端、输入的文本或编写了显式文件的程序。确定。谢谢你的解决方案=)@Penneke,你可能在Windows上。命令提示符处的comand
chcp
将显示控制台编码。它不一定是
cp850
cp437
为该字符提供相同的编码。在Python
importsys中;sys.stdout.encoding
还将告诉您控制台编码。