Почему выходы разные? (Как сделать print (s1) для вывода японского) - PullRequest
0 голосов
/ 09 апреля 2019

Я печатаю некоторые строки, которые являются Unicode японского, почему print (s1) выводит Unicode японского напрямую, но не японский же с s2?Как заставить s1 вывести «顧客»?Спасибо.

s_before = r'\(9867)\(5BA2)'
s1 = s_before.replace('(','').replace(')','').replace('\\','\\u')
print(s1)
s2 = '\u9867\u5BA2'
print('\u9867\u5BA2')
print(s2)

Я ожидаю, что вывод будет таким, как показано ниже:

顧客
顧客
顧客

, но фактический вывод будет таким, как показано ниже:

\u9867\u5BA2
顧客
顧客

1 Ответ

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

\u в '\u9867\u5BA2' - это просто нотация Python для символа Unicode, а не литерал \ и u, поэтому вы не можете просто создать строку из литерала \ и u и некоторые коды и ожидаем, что они будут представлять один символ Unicode.

Вместо этого вы можете кодировать строку в байты, а затем декодировать ее с кодировкой unicode_escape, чтобы сделать ее действительной строкой Unicode:

s_before = r'\(9867)\(5BA2)'
s1 = s_before.replace('(','').replace(')','').replace('\\','\\u').encode().decode('unicode_escape')
print(s1)

Это выводит:

顧客
...