我有两个应用程序在具有不同数据库的不同服务器上运行。我需要将一些数据从一个发布到另一个,所以,我使用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。
答案 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'。