Преобразовать строку в utf-16

У меня есть текстовый файл с японскими иероглифами. Я прочитал из него строку и хочу специально преобразовать ее в utf-16. Как я могу сделать это с помощью Python? Мой код выглядит так -

with open("C:\\Users\\badri\\jap.txt", 'rb') as f:
    for line in f:
        u = line.decode(encoding='utf-16',errors='strict')

Я получаю эту ошибку «LookupError: неизвестная кодировка: utf-16»

Причина в том, что я хочу это в utf-16, потому что слова разделены пробелами, и поэтому не имеет значения, на каком языке находится текстовый файл. Я мог бы использовать пробел в качестве разделителя и подсчитать количество слов в файле .

После разделения я могу легко распечатать их таким образом:

u1 = u'\u0048\u0065\u006c\u006c\u006f'
u2 = u'\u0077\u006f\u0072\u006c\u0064'
u3 = u'\u3053\u3093\u306b\u3061\u306f\u4e16\u754c'
print u1
print u2
print u3

Hello
world
こんにちは世界

person badri    schedule 16.05.2018    source источник
comment
потому что слова utf-16 разделены пробелами. Я не уверен, что вы имеете в виду, но UTF-16 не разделяет слова.   -  person Martijn Pieters    schedule 17.05.2018
comment
это питон 2.7 или питон 3?   -  person Cfreak    schedule 17.05.2018
comment
Извини Мартейн. Надо было слова разделять пробелами. UTF-16 впереди - опечатка. Я исправил это.   -  person badri    schedule 17.05.2018
comment
Мне нужно отделить слова из текстового файла, в котором есть слова из многих языков. Например, если у меня есть следующие слова в текстовом файле Hello world こんにちは世界, я не смогу разделить слова. Принимая во внимание, что если я преобразовал его в utf-16, то я получаю u'Hello world こんにちは世界' . Они разделены пробелами, поэтому я могу посчитать разные слова в этой строке, даже если язык другой. Это единственная идея, которую я смог придумать, чтобы разделить слова в файле, в котором есть несколько языков.   -  person badri    schedule 17.05.2018
comment
Cfreak — я использую Python 2.7. Но никаких проблем, даже если для решения нужен Python 3.   -  person badri    schedule 17.05.2018
comment
Теперь я добавил пример ближе к концу вопроса. Надеюсь, станет понятнее.   -  person badri    schedule 17.05.2018
comment
u'\u0048\u0065\u006c\u006c\u006f \u0077\u006f\u0072\u006c\u0064 \u3053\u3093\u306b\u3061\u306f\u4e16\u754c' — это не UTF-16. Это просто Юникод.   -  person Josh Lee    schedule 17.05.2018
comment
Файл jap.txt имеет кодировку. Может это utf-16, может и нет. Вам нужно знать кодировку, декодировать ее, а затем кодировать в utf-16.   -  person wim    schedule 17.05.2018
comment
@JoshLee Я преобразовал его здесь - branah.com/unicode-converter   -  person badri    schedule 17.05.2018
comment
@wim Я создал файл и ничего особенного не делал. Просто скопировал английские и японские иероглифы из Интернета.   -  person badri    schedule 17.05.2018


Ответы (1)


Это полностью зависит от кодировки файла.

В любом случае вам нужно сначала декодировать строку, а затем перекодировать ее так, чтобы она была utf-16.

with open(file_path, "r") as fh:
    for line in fh:
        string = line.decode("utf-8").encode("utf-16")
person Batman    schedule 16.05.2018
comment
Я создал этот файл и просто скопировал и вставил в него английские и японские символы. Больше ничего не делал. - person badri; 17.05.2018
comment
Также, когда я запускаю ваш код, я получаю сообщение об ошибке LookupError: unknown encoding: utf-16. Это связано с моим редактором? - person badri; 17.05.2018
comment
Неважно, как вы его создали, он все равно имеет какую-то кодировку. И вам нужно выяснить, что это такое, прежде чем вы сможете его расшифровать. Посмотрите, например, на это. - person Batman; 17.05.2018