将UTF-16特殊字符转换为UTF-8

时间:2012-02-02 08:46:55

标签: python django character-encoding

我正在使用django和Python,我遇到了在PostgreSQL中保存utf-16字符的问题。有什么方法可以在保存之前将utf-16转换为utf-8吗?

我在使用python 2.6这是我的代码片段

sample_data="This is the time of year when  Travel & Leisure, TripAdvisor and other travel media trot out their “Best†lists, so I thought I might share my own list of outstanding hotels I’ve had the good fortune to visit over the years."

以上数据包含一些拉丁特殊字符,但显示不正确,我只是想以适当的格式显示那些拉丁特殊字符。

2 个答案:

答案 0 :(得分:1)

没有“utf-16个字符”之类的东西。您应该使用print repr(data)显示您的数据,并告诉我们您遇到问题的数据。向我们展示您的数据的本质,例如“休闲•最佳”的repr()列出了我已经“

您实际拥有的是包含以 UTF-8 编码的文本的字节字符串。这是它的repr():

'Leisure \xe2\x80\x9cBest\xe2\x80\x9d lists I\xe2\x80\x99ve had'

你会注意到你所展示的3个guff。这些对应于repr。中的3个\xhh

Clump1(\xe2\x80\x9c)解码为U + 201C LEFT DOUBLE QUOTATION MARK。

Clump 2是\xe2\x80\x9d。请注意,只有前2个“拉丁特殊字符”又名“guff”出现在您的显示屏中。那是因为你的终端的编码是cp1252,它没有映射\ x9d;它只是忽略了它。 Unicode是U + 201D RIGHT DOUBLE QUOTATION MARK。

Clump 3:成为U + 2019 RIGHT SINGLE QUOTATION MARK(用作撇号)。

由于你有UTF-8编码的字节,你应该没有PostgreSQL的麻烦。如果您收到错误,请显示您的代码,完整的错误消息和完整的回溯。

如果您确实需要向Windows终端显示guff,print guff.decode('utf8').encode('cp1252') ...只需为cp1252不支持的unicode字符做好准备。

更新以回应评论我没有任何保存数据的问题,问题是在显示它时显示的是我们的字符,所以我想的是在保存之前将这些数据转换为正确?

下定决心。 (1)在您的问题中,您说“我在PostgreSQL中保存utf-16字符时遇到问题”。 (2)现在你说“我没有任何关于保存数据的问题,问题是在显示它时显示了所需的字符”

摘要:您的样本数据以UTF-8编码。如果PostgreSQL不接受UTF-8,请将其解码为Unicode。如果您有显示问题,请先尝试显示相应的Unicode;如果这不起作用,请尝试终端支持的编码(可能是cp125X系列之一。

答案 1 :(得分:-1)

这对我来说可以转换字符串:sample_data.decode('mbcs')。encode('utf-8')