【问题标题】:Unicode problems in PythonPython中的Unicode问题
【发布时间】:2013-03-21 07:15:47
【问题描述】:

嗯,好的,所以我在编码方面遇到了这个大问题,我只是不知道如何处理它。经过两天的谷歌搜索,我想我已经没有选择了:)

我想做的是以下。

  1. 在网站的文本框中放置文本
  2. 将文本发送到后端(用 Python 编写)
  3. 使用文本创建:
    一种。 PIL 中的图像。
    湾。 MySQL 中的一个条目。

现在,当我们谈论常规字符时,所有这些都可以顺利进行。但是当我尝试使用韩语、波兰语、日语字符时,我在图像和数据库中都插入了看起来很奇怪的字符。在下面的示例中,我将使用由波兰字符组成的三个字符串 - “ąść”。

这是我在谷歌搜索后所做的。

在 .htaccess 中插入以下内容:

AddCharset UTF-8 .py .css .js .html

我的 python 文件现在开始于:

#!/usr/bin/python
# -*- coding: utf-8 -*-

我所有的 MySQL 数据库都以“utf8_unicode_ci”编码。

现在,这是我正在尝试做的一个示例...每当我解析“ąść”(三个波兰字符)时,它都会保存在数据库中并在图像上生成为:

ąść

现在,一些调试问题。我直接进入 Python 并将以下内容分配给通常解析其文本的变量 (value_text1)(所以 - 没有文本解析,只需设置固定文本以生成图像并放入数据库):

A) 如果我选择value_text1 = 'ąść',我会得到…ść

B) 如果我选择value_text1 = u'ąść',我会收到以下错误消息:

UnicodeEncodeError:“latin-1”编解码器无法对字符进行编码 位置 0-1:序数不在范围内(256)

C) 如果我选择value_text1 = u'ąść'.encode('UTF-8'),结果会得到…ść

D) 如果我使用 value_text1 = u'\u0105\u015B\u0107'.encode('UTF-8'),其中 "\u0105\u015B\u0107" 是“ąść”的实际 unicode,我会得到 …ść

真的不知道我做错了什么——服务器设置、python 文件设置、错误的命令?将不胜感激任何想法,非常感谢您提前。

【问题讨论】:

  • 如何在 PIL 中呈现文本?
  • 你从哪里得到那个错误信息?引发该错误消息的代码是什么?
  • 也许你的编辑器没有在 utf-8 中保存非 ascii 字符。
  • @BrenBarn:我认为您在尝试执行 u"somestringwith-ąść" 时总是会遇到该错误
  • @jazzpi:如果您正确设置了编码,则不会(除非您尝试打印它或其他东西)。

标签: python mysql unicode utf-8 character-encoding


【解决方案1】:

如果我在交互式 shell 或 .py 文件中尝试它

#!/usr/bin/python
# -*- coding: utf-8 -*-
value_text1 = u'ąść'
print value_text1

它对我来说非常好用,所以我猜这与你的服务器配置有关。

顺便说一句,连接服务器时请务必使用 charset="utf-8"。

【讨论】:

  • 可能是这样...您知道我可以在哪里尝试搜索此配置吗?那会是 Apache 的东西还是 .htaccess 或其他东西?
  • 假设您使用的是 MySQLdb 模块,只需将 charset="utf-8" 添加到您的 MySQLdb.connect() 调用中:)
  • 哈不错!这确实有效,谢谢!现在需要弄清楚 PIL 问题,我已经准备好了......我现在肯定更接近了:)
猜你喜欢
  • 2015-07-07
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
相关资源
最近更新 更多