2015-10-14 97 views
1

1)如何将字符串如"wdzi\xc4\x99czno\xc5\x9bci"的变量转换为"wdzięczności"使用西班牙文或波兰语字符对字符串进行编码/转换

2)如何将字符串变量如"±", "Ä™", "Ć"转换为正确的字母?

我强调“变量”,因为我从谷歌搜索得到的只是“u'some string”之类的例子,我无法得到任何类似的工作。

我用"# -*-编码:utf-8 -*-“在我的脚本的第二行,我仍然撞击到这些问题

而且我是说,简单的print应该输出正确的 - 但事实并非如此

+1

[在Python中的字符串的方法的转义序列]的可能的复制(http://stackoverflow.com/questions/4020539/process-escape-sequences-in-a-string-in-python) –

回答

3

在。 Python 2.7版IDLE,我得到这样的输出:

>>> print "wdzi\xc4\x99czno\xc5\x9bci".decode('utf-8') 
wdzięczności 

你的第一个字符串似乎是一个UTF-8字节的字符串,因此所有必须是将其解码成Unicode字符串当Python打印该字符串,它会的。 ENCO根据您的环境决定适当的编码。

如果你使用的是Python 3,那么你的字符串已经被不正确地解码,并且需要更多的工作来修复这些损害。

>>> print("wdzi\xc4\x99czno\xc5\x9bci".encode('iso-8859-1').decode('utf-8')) 
wdzięczności 
+0

这简单的例子确实奏效,谢谢。但我仍然在脚本本身出现如下错误: 'UnicodeEncodeError:'latin-1'编解码器无法在位置187编码字符'\ u0119':序号不在范围内(256)' 编辑:同样我只是注意到,现在我的输出中有“wdzi \ xc4 \ x99czno \ xc2 \ xb6ci”,并且解码输出“wdzięczno¶ci” 或 UnicodeDecodeError:'utf-8'编解码器无法解码字节0xb1位置88:无效起始字节' 在windows-1250中尝试编码,仍然有错误。有任何想法吗? – dyer

+0

@dyer如果你使用的是Python 3,那么你在程序中创建的字符串应该是已经不需要修复的有效的Unicode字符串。例如''\ u0119''是[拉丁文小写字母与OGONEK'''](http://www.fileformat.info/info/unicode/char/0119/index.htm)。我的建议是*仅*用于从程序外部收到的已经损坏的字符串,它被称为Mojibake。最好的解决方案是首先防止这种情况发生,但是您的问题没有足够的信息来解决这个问题。 –

+0

@dyer您应该对字节字符串和Unicode文本字符串之间的区别有所了解→请参阅[Unicode howto](https://docs.python.org/3/howto/unicode.html)。如果最后出现类似“±”的字符串,则可能使用错误的编码打开了一个文件,例如。使用'open(path,encoding ='utf-8')'而不是'open(path)'。 – roeland