后期数据中的土耳其字符问题

时间:2011-03-02 10:19:54

标签: python character-encoding

我有两个应用程序在具有不同数据库的不同服务器上运行。我需要将一些数据从一个发布到另一个,所以,我使用post方法。我将相关信息连接成一个字符串,然后POST它... 我的数据类似于:

26AU223/AHMET DEMİROĞLU/18439586958/0//2000-07-31/2000-06-11/42.00/0

对于土耳其人物,我尝试使用

var1 = '26AU223/AHMET DEMİROĞLU/18439586958/0//2000-07-31/2000-06-11/42.00/0'
var1.encode('iso8859_9')

但是当我在第二个应用程序上收到这些数据并对其进行解码时,我意识到土耳其字符无法正确解码,所以我的结果是:

26AU223/AHMET DEM�O�U/18439586958/0//2011-07-31/2008-06-11/42.00/0

因此İĞ会导致问题,并且首字母 R L 也会被错误解码太

我为turish尝试了不同的编码参数,也试图在没有编码/解码的情况下POST daha(两个应用程序都使用UTF-8)但是我得到了类似的编码错误,奇怪的是 而不是İRĞL

3 个答案:

答案 0 :(得分:1)

使用Python 2.x,这显然是错误的:

var1 = '26AU223/AHMET DEMİROĞLU/18439586958/0//2000-07-31/2000-06-11/42.00/0'
var1.encode('iso8859_9')

Python 2有一个糟糕的设计缺陷,它允许你.encode()字节字符串(str类型)。您必须具有Unicode字符串,然后在POST之前对其进行编码。使用UTF-8以外的编码是不合理的。

var1 = u'26AU223/AHMET DEMİROĞLU/18439586958/0//2000-07-31/2000-06-11/42.00/0'
buf = var1.encode('utf-8')
# ...send buf over the network...
assert buf.decode('utf-8') == var1

如果您自己构建POST数据,请不要忘记进行URL转义。

答案 1 :(得分:1)

我用最简单的方法解决问题(:

引用我的文字之前,我将其转换为字符串:

quote(str(var1))

另一方面,以类似的方式取消引用它:

unquote(str(var1))

解决问题

答案 2 :(得分:0)

您是否在远程端获得了Unicode字符串对象?在这种情况下,您的问题是负责读取HTTP消息体的代码假定字符集错误。将HTTP请求Content-Type标头设置为'text / plain; charset = ISO-8859-9'。