Python/Django 中俄语字符显示不正确
Incorrect displaying of russian characters in Python / Django
我正在尝试使用 lxml 解析俄罗斯网站。但是,我在显示俄语字符时遇到了问题,我无法克服自己。
我们以html这首曲子为例:
<a href="http://www.2do2go.ru/msk/events/41600/kvest-v-realnosti-karty-dengi-dva-stola" class="medium-events-list_link">Квест в реальности «Карты, деньги, два стола»</a>
我正在用这块来解析它:
title = root.xpath('//*[@id="event-id-41600"]/div[3]/div[2]/a/text()')[0].encode('utf-8').strip()
这就是我得到的:
├É┬Ü├É┬▓├É┬Á├Ĺ┬ü├Ĺ┬é ├É┬▓ ├Ĺ┬Ç├É┬Á├É┬░├É┬╗├Ĺ┬î├É┬Ż├É┬ż├Ĺ┬ü├Ĺ┬é├É┬Ş ├é┬ź├É┬Ü├É┬░├Ĺ┬Ç├Ĺ┬é├Ĺ┬ő, ├É┬┤├É┬Á├É┬Ż├Ĺ┬î├É┬│├É┬Ş, ├É┬┤├É┬▓├É┬░ ├Ĺ┬ü├Ĺ┬é├É┬ż├É┬╗├É┬░├é┬╗
在数据库中,但我看到的不是西里尔文:
ÐвеÑÑ Ð² ÑеалÑноÑÑи «ÐаÑÑÑ, денÑги, два ÑÑола»
哦,顺便说一句供参考:
这篇文章:
title = item.xpath('div[3]/div[2]/a')[0]
print etree.tostring(title)
returns 我这个:
<a href="http://www.2do2go.ru/msk/events/41600/kvest-v-realnosti-karty-dengi-dva-stola" class="medium-events-list_link">Квест в реальности «Карты, деньги, два стола»</a>
不确定它是否与数据库相关或与 python 编码有关。任何帮助表示赞赏:)
提前致谢。
编辑:我正在使用 MySQL 和 Django ORM
Django 设置:
DATABASE_OPTIONS = {
"charset": "utf8_general_ci",
"init_command": "SET storage_engine=INNODB"
}
网页:
<!DOCTYPE html>
<html lang="en" prefix="og: http://ogp.me/ns#" class="">
<head>
<title>Интересные события в Москве в январе - феврале 2016</title>
<meta charset="utf-8">
您的服务器上未 exist/not 设置西里尔代码页。所以即使在 UTF-8 中,您也无法在终端中查看俄语字符。但是 python 仍然可以正确使用 unicode。
通过这个命令:
title = root.xpath('//*[@id="event-id-41600"]/div[3]/div[2]/a/text()')[0].encode('utf-8').strip()
你得到 unicode string 并将其编码为 bytes (str in python2)。并将字节保存在数据库中。
当您从数据库 python 加载字符串时使用默认代码页(可能是 Latin-1),您会得到:
ÐвеÑÑ Ð² ÑеалÑноÑÑи «ÐаÑÑÑ, денÑги, два ÑÑола»
因此,您应该将 unicode 字符串存储在数据库中(不要使用编码)
title = root.xpath('//*[@id="event-id-41600"]/div[3]/div[2]/a/text()')[0].strip()
P.S。我不明白 encode('Latin-1') 如何帮助(来自评论),但问题已解决:)
我正在尝试使用 lxml 解析俄罗斯网站。但是,我在显示俄语字符时遇到了问题,我无法克服自己。
我们以html这首曲子为例:
<a href="http://www.2do2go.ru/msk/events/41600/kvest-v-realnosti-karty-dengi-dva-stola" class="medium-events-list_link">Квест в реальности «Карты, деньги, два стола»</a>
我正在用这块来解析它:
title = root.xpath('//*[@id="event-id-41600"]/div[3]/div[2]/a/text()')[0].encode('utf-8').strip()
这就是我得到的:
├É┬Ü├É┬▓├É┬Á├Ĺ┬ü├Ĺ┬é ├É┬▓ ├Ĺ┬Ç├É┬Á├É┬░├É┬╗├Ĺ┬î├É┬Ż├É┬ż├Ĺ┬ü├Ĺ┬é├É┬Ş ├é┬ź├É┬Ü├É┬░├Ĺ┬Ç├Ĺ┬é├Ĺ┬ő, ├É┬┤├É┬Á├É┬Ż├Ĺ┬î├É┬│├É┬Ş, ├É┬┤├É┬▓├É┬░ ├Ĺ┬ü├Ĺ┬é├É┬ż├É┬╗├É┬░├é┬╗
在数据库中,但我看到的不是西里尔文:
ÐвеÑÑ Ð² ÑеалÑноÑÑи «ÐаÑÑÑ, денÑги, два ÑÑола»
哦,顺便说一句供参考:
这篇文章:
title = item.xpath('div[3]/div[2]/a')[0]
print etree.tostring(title)
returns 我这个:
<a href="http://www.2do2go.ru/msk/events/41600/kvest-v-realnosti-karty-dengi-dva-stola" class="medium-events-list_link">Квест в реальности «Карты, деньги, два стола»</a>
不确定它是否与数据库相关或与 python 编码有关。任何帮助表示赞赏:)
提前致谢。
编辑:我正在使用 MySQL 和 Django ORM
Django 设置:
DATABASE_OPTIONS = {
"charset": "utf8_general_ci",
"init_command": "SET storage_engine=INNODB"
}
网页:
<!DOCTYPE html>
<html lang="en" prefix="og: http://ogp.me/ns#" class="">
<head>
<title>Интересные события в Москве в январе - феврале 2016</title>
<meta charset="utf-8">
您的服务器上未 exist/not 设置西里尔代码页。所以即使在 UTF-8 中,您也无法在终端中查看俄语字符。但是 python 仍然可以正确使用 unicode。
通过这个命令:
title = root.xpath('//*[@id="event-id-41600"]/div[3]/div[2]/a/text()')[0].encode('utf-8').strip()
你得到 unicode string 并将其编码为 bytes (str in python2)。并将字节保存在数据库中。
当您从数据库 python 加载字符串时使用默认代码页(可能是 Latin-1),您会得到:
ÐвеÑÑ Ð² ÑеалÑноÑÑи «ÐаÑÑÑ, денÑги, два ÑÑола»
因此,您应该将 unicode 字符串存储在数据库中(不要使用编码)
title = root.xpath('//*[@id="event-id-41600"]/div[3]/div[2]/a/text()')[0].strip()
P.S。我不明白 encode('Latin-1') 如何帮助(来自评论),但问题已解决:)