При вводе "我"
интерпретатор Python получает из терминала представление этого символа в вашем локальном наборе символов, которое хранится в строковом байтовом байте из-за ""
. В моей системе UTF-8 это '\xe6\x88\x91'
. На вашем, это '\xce\xd2'
, потому что вы используете GB2312. Это объясняет ценность вашей переменной a
.
При входе u"我"
, интерпретатор Python не знает, какой кодирующий 我
характер в Что она делает это почти так же, как и для обычной строки:. Он хранит байт символа в строке Unicode, интерпретируя каждый байт как кодовый код Юникода, следовательно, неправильный результат u'\xce\xd2'
(или, на моей коробке, u'\xe6\x88\x91'
).
Эта проблема существует только в интерактивном интерпретаторе. Когда вы пишете скрипты или модули Python, вы можете найти specify the encoding, а строки Unicode выйдут правильно. Например, в моей системе, следующий печатает слово Liberte дважды:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print(u"liberté")
print("liberté")
Какой терминал вы используете? Я не могу воспроизвести результаты на моем юникоде gnome-terminal ('c === u '\ u6211'') –
@ChrisMorgan Я тестирую эти коды в IDLE. –
также может воспроизвести это с помощью IDLE –