如何测试Python 2.7的编码类型?

问题描述 投票:0回答:1

我正在尝试解决我遇到的有关外国字符(任何和所有字母表)的问题。我的脚本(2.7 python)接收字符(英文字母和其他外来字符的混合)作为unicode json,并将其发送到数据库插入函数,以便使用psycopg2插入到某些表中。这作为一个脚本完美无缺,但曾经不如服务(外来字符作为废话插入)。这种unicoding /编码/解码的东西太混乱了!我试图跟随这个(https://www.pythoncentral.io/python-unicode-encode-decode-strings-python-2x/)希望了解我收到的确切内容然后发送到数据库,但在我看来,我需要知道编码在各个阶段是什么。你如何获得编码类型是什么?对不起,这一定很简单,但我不知道如何获取这些信息,而我认为其他关于此问题的问题尚未得到完全解答。这不可能是难以捉摸的。请帮忙。

根据要求添加信息... - 是的,很想转移到3.x,但现在不能。 - 目前主要是我测试,它还不适合用户。我正在从Windows 2012 Server AWS计算机进行测试和开发,该服务托管在类似的计算机上。是的 - 您如何找到区域设置信息?

已经使用前端dev(js)进行了一些测试,并且他声明json输入正在以url编码的形式出现...当我输入它时,它只是说unicode。思考?

python python-2.7 python-unicode
1个回答
0
投票

不要依赖于默认的系统编码。相反,总是自己设置:

    # 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)

请注意,我始终对编码进行了硬编码。

但是,如果您不知道输入的编码怎么办?嗯,那是个问题。 You need to know that。但我也明白unicode可能很痛苦,而且这个来自python社区的人告诉你how to stop the pain (video)

注意,python 3中的一个重大变化是更好的unicode支持。而不是使用unicode包和令人困惑的py2 str类型,在python 3中str类型就是python 2的unicode类型,你可以在更方便的地方指定编码:

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

© www.soinside.com 2019 - 2024. All rights reserved.