提问人:noydb 提问时间:4/18/2019 最后编辑:noydb 更新时间:4/19/2019 访问量:63
如何测试编码类型Python 2.7?
How to test for encoding type Python 2.7?
问:
我正在尝试解决我遇到的有关外来字符(任何和所有字母)的问题。我的脚本(2.7 python)以 unicode json 的形式接收字符(英文字母和其他外来字符的混合),并将其发送到数据库插入函数,以便使用 psycopg2 插入到某些表中。这非常适合作为脚本,但曾经不是服务(外来字符入为废话)。这种统一编码/编码/解码的东西太令人困惑了!我正在尝试遵循这个(https://www.pythoncentral.io/python-unicode-encode-decode-strings-python-2x/),希望了解我确切地接收到什么,然后发送到数据库,但在我看来,我需要知道各个阶段的编码是什么。你如何获取编码类型是什么?对不起,这一定很简单,但我没有找到如何获取这些信息,而且在我看来,其他人关于此事的问题还没有得到确切的回答。这不可能那么难以捉摸。请帮忙。
根据要求提供附加组件信息... -是的,很想迁移到 3.x,但现在不能。 -目前主要是我测试的,它还没有对用户开放。我正在从 Windows 2012 Server AWS 计算机进行测试和开发,并且该服务托管在类似的计算机上。 所以是的 - 你如何找到语言环境信息?
已经对前端开发人员 (js) 进行了一些测试,他说 json 输入以 url 编码的形式传给我......当我输入它时,它只是说 unicode。思潮??
答:
不要依赖默认系统编码。相反,请始终自行设置:
# read in a string (a bunch of bytes the encoding of which you should know)
str = sys.stdin.read();
# decode the bytes into a unicode string
u = unicode.decode(str, encoding='ISO-8859-1', errors=replace);
# do stuff with the string
# ...
# always operate on unicode stuff inside your program.
# make a 'unicode sandwhich'.
# ...
# encode the bytes in preparation for writing them out
out = unicode.encode(u, encoding='UTF-8')
# great, now you have bytes you can just write out
with open('myfile.txt', 'wb') as f:
rb.write(out)
请注意,我在整个过程中对编码进行了硬编码。
但是,如果您不知道输入的编码怎么办?嗯,这是一个问题。你需要知道这一点。但我也明白 unicode 可能会很痛苦,来自 python 社区的这个人告诉你如何停止痛苦(视频)。
请注意,python 3 的一大变化是更好的 unicode 支持。在 python 3 中,type 就是 python 2 的类型,而不是使用包和令人困惑的 py2 类型,您可以在更方便的地方指定编码:unicode
str
str
unicode
with open('myfile.txt', 'w', encoding=UTF-8, errors='ignore') as f:
# ...
评论
import locale;print(locale.getlocale())