> s = 'kasım' # ı -> 'i' without dot, lowercase letter, turkish.
> print s
> 'kas\xc4\xb1m'
> unicode(s, 'utf-8')
工作正常。
在Windows上:
> s = 'kasım' # ı -> 'i' without dot, lowercase letter, turkish.
> print s
> 'kas\x8dm'
> unicode(s, 'utf-8')
抛出unicodedecode错误;
之前,语言环境在代码中设置,如下面的代码:
if platform is windows:
locale_to_set = 'turkish'
elif platform is linux:
locale_to_set = 'tr_TR.utf-8'
locale.setlocale(locale.LC_ALL, locale_to_set)
我错误或错过的部分是什么?任何想法将不胜感激。
请注意:
我从datetime.datetime.utcnow()。strftime(....)得到'Kasım'字(意思是11月),用户可以根据偏好改变语言。
答案 0 :(得分:2)
依赖系统的输入编码是一个坏主意,因为正如您所发现的那样,系统的不同可能因系统而异。因此,最好避免源代码中使用非ASCII字符并使用符号名称。例如:
name = u'kas\u0131m'
如果您的字符串来自系统中的其他位置,例如来自本地化的strftime
函数,则在将其解码为Unicode时,您将需要使用正确的语言环境:
ignore, encoding = locale.getlocale()
name = unicode(s, encoding)
答案 1 :(得分:2)
你要求python将一系列字节转换为unicode字符串,并说这些字节是utf-8编码的。但是你自己的代码otutput表明,在windows下,一系列字节不在utf-8中,这就是你得到错误的原因。
在没有评论根据操作系统设置不同语言环境的决定的情况下,要使代码生效,您需要在行中的Windows下运行时指定不同的字符集
unicode(s, 'utf-8')
- 通过在Windows下将语言环境设置为“土耳其语”来设置任何字符集。