无法在OS X终端应用程序中解码Python中的UTF-8字符串。

15 浏览
0 Comments

无法在OS X终端应用程序中解码Python中的UTF-8字符串。

我已经将terminal.app设置为接受utf-8编码,在bash中我可以输入和复制粘贴unicode字符,但是如果我启动Python shell,我就不能这样做,如果尝试解码unicode字符,我会遇到错误:

有人知道我做错了什么吗?

0
0 Comments

在Python的OS X终端应用程序中,当使用UTF-8编码的字符串无法解码时,会出现"Can't decode utf-8 string in python on os x terminal.app"的问题。这个问题的出现是因为终端应用程序默认使用的编码方式是ASCII,而不是UTF-8。

解决这个问题的方法是使用正确的编码方式进行解码。在上述代码中,首先定义了一个UTF-8编码的字符串"wtf",然后尝试打印这个字符串,但结果显示为乱码。接下来使用"latin-1"编码对字符串进行解码,并打印解码后的结果,发现输出正确。最后,将解码后的结果转换为Unicode,并再次打印,结果也是正确的。

因此,解决这个问题的方法是将字符串使用正确的编码方式进行解码,例如使用"latin-1"编码。

当在Python的OS X终端应用程序中无法解码UTF-8字符串时,可以尝试使用正确的编码方式进行解码,例如使用"latin-1"编码。

0
0 Comments

在这个问题中,出现了编码/解码混淆。首先,开始时我们有一个Unicode对象:u'\xe4\xf6\xfc'。这个Unicode对象表示的是"äöü"这三个字符的Unicode码点。如果我们想要将它们转换成Utf-8编码,我们需要对它们进行编码操作: u'\xe4\xf6\xfc'.encode('utf-8')。这样得到的六个字符就是"äöü"的Utf-8表示形式:'\xc3\xa4\xc3\xb6\xc3\xbc'。

如果我们调用decode()方法,我们试图将字符解码成某种编码形式,然后再转换成Unicode。但是,由于它已经是Unicode,所以这个过程是行不通的。第一次调用尝试将Ascii编码转换成Unicode,第二次调用尝试将Utf-8编码转换成Unicode。由于u'\xe4\xf6\xfc'既不是有效的Ascii编码,也不是有效的Utf-8编码,这两次转换都失败了。

进一步混淆的原因可能是'\xe4\xf6\xfc'也是"äöü"的Latin1/ISO-8859-1编码。如果我们写一个普通的Python字符串(没有前面的"u"标记它为Unicode),我们可以使用decode('latin1')将其转换为Unicode对象。这样就得到了u'\xe4\xf6\xfc'这个Unicode对象。

这个问题的原因是编码/解码混淆,解决方法是使用正确的编码方式进行编码或解码操作。

0
0 Comments

在Python中,编码和解码是处理Unicode和字节流之间转换的过程。编码将Unicode转换为字节流,而解码将字节流转换为Unicode。根据给出的代码段,该问题是无法在Python的OS X终端上解码UTF-8字符串。

解决方法是使用正确的编码格式进行解码。在给出的代码中,使用UTF-8编码格式对字节流进行编码,然后使用UTF-8进行解码。这是不正确的,因为UTF-8已经是一个编码好的字节流,不需要再进行编码。正确的做法是使用正确的编码格式对字节流进行解码。

以下是修复后的代码:

Python 2.6.1 (r261:67515, Dec  6 2008, 16:42:21) 
[GCC 4.0.1 (Apple Computer, Inc. build 5370)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> wtf = u'\xe4\xf6\xfc'
>>> wtf
u'\xe4\xf6\xfc'
>>> print wtf
äöü
>>> wtf.encode('UTF-8')
'\xc3\xa4\xc3\xb6\xc3\xbc'
>>> print '\xc3\xa4\xc3\xb6\xc3\xbc'.decode('UTF-8')
äöü

问题的原因在于错误地使用了UTF-8进行解码。通过将解码的编码格式更正为UTF-8,问题得以解决。

0