2011-03-02 69 views
0

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

所以İĞ导致问题,并且还跟在第一个字母RL也被错误解码。

我试图为turish不同势编码参数,还试图POST达哈没有编码/解码(这两个应用程序使用UTF-8),但我得到类似的编码误差,具有奇怪的代替IRGL

+0

是个是Python 2.x? – AndiDog 2011-03-02 10:22:02

+3

您是否尝试使用utf8编码? (只是为了清楚) – frail 2011-03-02 10:23:36

+0

我使用2.6.5,是的,我也试过没有成功。 – FallenAngel 2011-03-02 10:45:54

回答

1

我解决了最简单的方式(问题:

报价我的文字,我将它转换为字符串:

quote(str(var1)) 

,而在另一侧,类似的解除引用它方法:

unquote(str(var1)) 

那解决问题

+0

如果你不明白它的作用,你的解决方案将不会帮助你。根据你的问题,你已经有一个(字节)字符串。 – AndiDog 2011-03-02 12:21:35

+0

在unquote之前的字符串可能没用,但引用__string__是需要的,因为我使用# - * - coding:utf-8 - * - 在每个py文件中,unicode在某些情况下可能会导致麻烦... – FallenAngel 2011-03-02 12:32:25

+0

我是说你的'var1'已经是一个字符串了(在Python 2.x中是字节字符串),所以如果你的源文件编码是' - * - coding:utf-8 - * - ',那个变量已经是UTF-8编码。您不是转换为字符串,因为它已经是一个字符串,所以我想知道您在代码中更改了哪些内容以纠正行为。 – AndiDog 2011-03-02 13:29:54

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字符串,然后在开机前对它进行编码。使用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逃跑。

+0

试过了,但没有结果): – FallenAngel 2011-03-02 12:19:17

0

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