Я хочу кодировать строку в UTF-8 и просматривать соответствующие байты UTF-8 отдельно. В Python РЕПЛ следующее, кажется, работает нормально:Преобразование строки Юникода в UTF-8, а затем в JSON
>>> unicode('©', 'utf-8').encode('utf-8')
'\xc2\xa9'
Обратите внимание, что я использую U+00A9 COPYRIGHT SIGN в качестве примера здесь. '\xC2\xA9'
близок к тому, что я хочу - строка, состоящая из двух отдельных кодовых точек: U + 00C2 и U + 00A9. (Когда UTF-8-декодирован, он возвращает исходную строку, '\xA9'
.)
Затем я хочу, чтобы строка с кодировкой UTF-8 была преобразована в JSON-совместимую строку. Однако, следующее, кажется, не делать то, что я хочу:
>>> import json; json.dumps('\xc2\xa9')
'"\\u00a9"'
Обратите внимание, что он генерирует строку, содержащую U + 00A9 (оригинальный символ). Вместо этого мне нужна строка с кодировкой UTF-8, которая будет выглядеть как "\u00C2\u00A9"
в действительном JSON.
TL; DR Как я могу превратить '©'
в "\u00C2\u00A9"
в Python? Я чувствую, что мне не хватает чего-то очевидного - нет ли встроенного способа сделать это?
** Примечание: ** [Результаты использования 'print' в REPL Python зависят от переменной среды' $ LANG'.] (Http://stackoverflow.com/a/3221297/96656). Это вводит дополнительный слой путаницы при тестировании таких вещей. –
utf8 - unicode. –
Это утверждение неверно на многих уровнях. UTF-8 является кодировкой. Юникод больше похож на базу данных, которая отображает числа (кодовые точки) на символы. Эти числа затем используются кодировками, такими как UTF-8. Это правда, что в отличие от множества других кодировок UTF-8 способен кодировать/декодировать любой символ Unicode, но это не означает UTF-8 _is_ Unicode. –