gpt4 book ai didi

python - 吐血: how to make a scrapy, python,以及Windows 7中可以处理unicode的postgres生态系统

转载 作者:行者123 更新时间:2023-11-29 13:23:30 28 4
gpt4 key购买 nike

如果有人可以帮助我解决我在下面描述的问题,或者(最坏的情况)建议一个可行的替代环境(尽管我不愿意升级到 Windows 10),真的将不胜感激


我正在从日本网站上抓取大部分为英文的网页。一些必填字段中包含汉字。

我在 Windows 7 安装上使用 scrapy、postgres 9.5 和 python 2.7。

Scrapy 必须在 cmd.exe shell 中运行,我正在检查 psql.exe 实例中的数据库结果,该实例也在 cmd.exe shell 中运行。我一直在为 cmd.exe 使用 Console2 应用程序。

在此设置中进行调试是一种可怕的体验:

碎片壳

我无法执行任何诊断性 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\9.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)

一个黑客解决方案是将我的语言环境更改为日语。现在控制台正确显示了我的汉字。但此后它搞砸了显示(>提示奇怪地出现并且光标图形与光标实际所在的位置不对齐!)。

enter image description here

最佳答案

根据您的错误消息,cp437 是美国 Windows 控制台默认编码。您可以尝试暂时将您的系统区域设置切换为“Japanese(Japan)”,以便您可以将汉字打印到控制台。转到“控制面板”、“区域和语言”、“管理”选项卡,然后单击“更改系统区域设置...”。重新启动后,默认的 Windows 控制台默认编码应该是适合日语的编码。

我以前这样做是为了将中文打印到控制台。该设置只影响非 Unicode 程序,现在大多数程序都是完全 Unicode 的。

关于python - 吐血: how to make a scrapy, python,以及Windows 7中可以处理unicode的postgres生态系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37716376/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com