吐血:如何在 Windows 7 中创建一个可以处理 unicode 的好斗的 python 和 postgres 生态系统
Puking blood: how to make a scrapy, python, and postrgres ecosystem inside Windows 7 that can deal with unicode
真的 如果有人能帮助我解决我在下面描述的问题,或者(最坏的情况)建议一个可行的替代环境(虽然我很讨厌升级到 Windows 10)
我正在从日本网站上抓取大部分为英文的网页。一些必填字段中有汉字。
我在 Windows 7 安装中使用 scrapy、postgres 9.5 和 python 2.7。
Scrapy 必须 运行 在 cmd.exe shell 中,我正在检查 psql.exe 实例中的数据库结果也在 运行ning 中一个 cmd.exe shell。我一直在为 cmd.exe.
使用 Console2 应用程序
在此设置中进行调试是一种糟糕的体验:
scrapy shell
我无法执行任何诊断 print()
消息,因为汉字导致异常
> print st['kanji_name']
> File "C:\Users\mds\Anaconda2\lib\encodings\cp437.py", line 12, in encode
> return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec can't encode characters in
> position 0-8: character maps to <undefined>
我已经看到有关将活动代码页更改为 chcp 65001
的解决方案,但 scrapy 显然不理解 cp65001
C:\Users\_python\j_school>chcp 65001
Active code page: 65001
抛出错误:
C:\Users\_python\j_school>scrapy crawl j_school
Traceback (most recent call last):
File "C:\Users\s\Anaconda2\lib\site-packages\twisted\internet\defer.py", line 588, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "C:\Users\_python\j_school\j_school\spiders\j_school_spider.py", line 141, in parse
print(st['english_name'])
LookupError: unknown encoding: cp65001
PSQL
PSQL 已经在启动时警告我
C:\Program Files\PostgreSQL.5\bin>psql m_experiment postgres
psql (9.5rc1)
WARNING: Console code page (437) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
无论我是否尝试 chcp 65001
,psql 仍然不会打印这些。
m_experiment=# select * from schools limit 1;
ERROR: character with byte sequence 0xe6 0x9d 0xb1 in encoding "UTF8" has no equivalent in encoding "WIN1252"
我也尝试过设置 client_encoding,但是这会导致一些错误,而 postgres 坚持认为我内存不足!
m_experiment=# SET client_encoding = 'UTF8';
SET
m_experiment=# show client_encoding;
Not enough memory.
m_experiment=#
我在 2011 年左右发现了多个关于此问题的错误报告,但从未修复过???反正我found a manual way to fix it,pset pager off
咒语解决问题
现在 psql 至少可以吐出一个响应,尽管它不能正确呈现汉字。
m_experiment=# select english_name, kanji_name from schools limit 1;
english_name | kanji_name
-------------------------------------+--------------------
TOKYO INTERNATIONAL JAPANESE SCHOOL | æÂ±äº¬å›½é𛿗¥æœ¬èªžå¦院
(1 row)
一个黑客解决方案是将我的语言环境更改为日语。现在控制台正确显示了我的汉字。但此后它搞砸了显示(>提示奇怪地出现并且光标图形与光标实际所在的位置不对齐!)。
根据您的错误消息,cp437
是美国 Windows 控制台默认编码。您可以尝试暂时将您的系统区域设置切换为 "Japanese(Japan)",以便您可以将汉字打印到控制台。转到“控制面板”、“区域和语言”、“管理”选项卡并单击 "Change system locale..."。重新启动后,默认 Windows 控制台默认编码应该是适合日文的编码。
我之前这样做是为了将中文打印到控制台。该设置仅影响非 Unicode 程序,现在大多数程序都是完全 Unicode。
真的 如果有人能帮助我解决我在下面描述的问题,或者(最坏的情况)建议一个可行的替代环境(虽然我很讨厌升级到 Windows 10)
我正在从日本网站上抓取大部分为英文的网页。一些必填字段中有汉字。
我在 Windows 7 安装中使用 scrapy、postgres 9.5 和 python 2.7。
Scrapy 必须 运行 在 cmd.exe shell 中,我正在检查 psql.exe 实例中的数据库结果也在 运行ning 中一个 cmd.exe shell。我一直在为 cmd.exe.
使用 Console2 应用程序在此设置中进行调试是一种糟糕的体验:
scrapy shell
我无法执行任何诊断 print()
消息,因为汉字导致异常
> print st['kanji_name']
> File "C:\Users\mds\Anaconda2\lib\encodings\cp437.py", line 12, in encode
> return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec can't encode characters in
> position 0-8: character maps to <undefined>
我已经看到有关将活动代码页更改为 chcp 65001
的解决方案,但 scrapy 显然不理解 cp65001
C:\Users\_python\j_school>chcp 65001
Active code page: 65001
抛出错误:
C:\Users\_python\j_school>scrapy crawl j_school
Traceback (most recent call last):
File "C:\Users\s\Anaconda2\lib\site-packages\twisted\internet\defer.py", line 588, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "C:\Users\_python\j_school\j_school\spiders\j_school_spider.py", line 141, in parse
print(st['english_name'])
LookupError: unknown encoding: cp65001
PSQL
PSQL 已经在启动时警告我
C:\Program Files\PostgreSQL.5\bin>psql m_experiment postgres
psql (9.5rc1)
WARNING: Console code page (437) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
无论我是否尝试 chcp 65001
,psql 仍然不会打印这些。
m_experiment=# select * from schools limit 1;
ERROR: character with byte sequence 0xe6 0x9d 0xb1 in encoding "UTF8" has no equivalent in encoding "WIN1252"
我也尝试过设置 client_encoding,但是这会导致一些错误,而 postgres 坚持认为我内存不足!
m_experiment=# SET client_encoding = 'UTF8';
SET
m_experiment=# show client_encoding;
Not enough memory.
m_experiment=#
我在 2011 年左右发现了多个关于此问题的错误报告,但从未修复过???反正我found a manual way to fix it,pset pager off
咒语解决问题
现在 psql 至少可以吐出一个响应,尽管它不能正确呈现汉字。
m_experiment=# select english_name, kanji_name from schools limit 1;
english_name | kanji_name
-------------------------------------+--------------------
TOKYO INTERNATIONAL JAPANESE SCHOOL | æÂ±äº¬å›½é𛿗¥æœ¬èªžå¦院
(1 row)
一个黑客解决方案是将我的语言环境更改为日语。现在控制台正确显示了我的汉字。但此后它搞砸了显示(>提示奇怪地出现并且光标图形与光标实际所在的位置不对齐!)。
根据您的错误消息,cp437
是美国 Windows 控制台默认编码。您可以尝试暂时将您的系统区域设置切换为 "Japanese(Japan)",以便您可以将汉字打印到控制台。转到“控制面板”、“区域和语言”、“管理”选项卡并单击 "Change system locale..."。重新启动后,默认 Windows 控制台默认编码应该是适合日文的编码。
我之前这样做是为了将中文打印到控制台。该设置仅影响非 Unicode 程序,现在大多数程序都是完全 Unicode。