如何测试编码类型Python 2.7?

How to test for encoding type Python 2.7?

提问人:noydb 提问时间:4/18/2019 最后编辑:noydb 更新时间:4/19/2019 访问量:63

问:

我正在尝试解决我遇到的有关外来字符(任何和所有字母)的问题。我的脚本(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。思潮??

蟒蛇 python-2.7 python-unicode

评论

1赞 snakecharmerb 4/18/2019
如果代码作为脚本工作,而不是服务工作,则表明问题出在执行代码的用户的区域设置中。例如,您的用户可能使用具有 Unicode 友好编码的区域设置,但运行该服务的系统用户可能会使用不同的区域设置来破坏您的 Unicode。您能否编辑您的问题以包括执行代码的操作系统?然后,也许人们可以解释如何找到必要的区域设置信息。
0赞 wpercy 4/18/2019
如果可能的话,我建议迁移到 python 3.x,unicode 支持比 python 2.7 强大得多
0赞 snakecharmerb 4/19/2019
要获取区域设置信息,请执行以下操作: .可以使用 urllib.parse.unquote 和类似工具对 URL 编码(或百分比编码)进行解码。import locale;print(locale.getlocale())

答:

0赞 djhaskin987 4/19/2019 #1

不要依赖默认系统编码。相反,请始终自行设置:

    # 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 类型,您可以在更方便的地方指定编码:unicodestrstrunicode

with open('myfile.txt', 'w', encoding=UTF-8, errors='ignore') as f:
   # ...