Как проверить на кодировку типа Python 2.7? - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь решить проблему, связанную с иностранными символами (любыми алфавитами). Мой скрипт (2.7 python) получает символы (смесь английского алфавита и других иностранных символов) в виде юникода json и отправляется в функцию вставки в базу данных для вставки в некоторые таблицы с помощью psycopg2. Это прекрасно работает как скрипт, но когда-то не так, как сервис (иностранные символы вставляются как бессмыслица). Этот материал по кодированию / декодированию настолько запутан! Я пытаюсь следовать этому (https://www.pythoncentral.io/python-unicode-encode-decode-strings-python-2x/) в надежде понять, что именно я получаю, а затем отправить в базу данных, но мне кажется, что мне нужно знать, что такое кодировка на разных этапах , Как вы получаете, что тип кодировки? Извините, это должно быть так просто, но я не нахожу, как получить эту информацию, и, на мой взгляд, на другие вопросы по этому вопросу точно не ответили. Это не может быть так неуловимо. Пожалуйста, помогите.

Информация о дополнении по запросу ... Да, хотелось бы перейти на 3.x, но пока не могу. -В настоящее время это в основном я тестирую, пока что не для пользователей. Я тестирую и разрабатываю на компьютере с Windows 2012 Server AWS, а служба размещается на аналогичной машине. Так что да - как вы находите информацию о локали?

Провел некоторое тестирование с внешним интерфейсом dev (js), и он заявляет, что вход json поступает ко мне в кодировке url ... когда я его набираю, он просто говорит Unicode. Мысли ??

1 Ответ

0 голосов
/ 18 апреля 2019

Не полагайтесь на кодировку системы по умолчанию.Вместо этого всегда устанавливайте его самостоятельно:

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

Обратите внимание, я жестко закодировал кодировку повсюду.

Но что, если вы не знаете кодировку ввода?Ну, это проблема. Вы должны знать, что .Но я также понимаю, что юникод может быть болезненным, и есть один парень из сообщества питонов, который говорит вам , как остановить боль (видео) .

Обратите внимание, одно из БОЛЬШИХ изменений в Python 3Лучшая поддержка Unicode.Вместо использования пакета unicode и сбивающего с толку типа py2 str в python 3 str тип представляет собой именно то, что было в типе Python 2 unicode, и вы можете указывать кодировки в более удобных местах:

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

...