Работа со строками со смешанными кодировками в Python 3.x - PullRequest
0 голосов
/ 08 февраля 2012

Я работаю с двоичным файлом, который ссылается на другой файл, используя абсолютные пути.Путь содержит символы как японского, так и ascii.

Указана длина строки, поэтому я могу просто прочитать столько байтов и преобразовать ее в строку.

Однако проблема заключается в попыткепреобразовать строкуЕсли я укажу кодировку ascii, это не сработает на японских символах.Если я укажу его как японскую кодировку (shift-jis или что-то еще), он не будет правильно читать английские символы.

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

Какой самый быстрый и чистый способ преобразовать эти байты в строку?Кодировки известны.Будет ли такая же техника работать в старых версиях Python.

1 Ответ

3 голосов
/ 08 февраля 2012

Звучит так, будто вы стали жертвой неправильного понимания основ Юникода и кодировок.Возможно, у вас нет, но недоразумения распространены и понятны, а описываемая вами ситуация - нет.

Строка байтов, содержащая смешанные кодировки, по определению, недопустима в любой из этих кодировок.Если бы это действительно было так, вам пришлось бы разбить строку байтов на ее части и декодировать каждую часть отдельно.В этом случае это, вероятно, будет означать разделение на разделители пути, поэтому это будет достаточно просто, но в других случаях это не так.Тем не менее, я серьезно сомневаюсь, что это так, поскольку это будет означать, что ваш источник безумен.Такое бывает, но вряд ли.: -)

Если источник дает вам один путь в виде строки байтов, наиболее вероятно, что эта строка использует только одну кодировку. Может содержать как японские, так и ASCII-символы и все еще использовать одну кодировку. Наиболее распространенными кодировками, которые могут обрабатывать как японский, так и ASCII, являются UTF-8 и UTF-16.Я предполагаю, что ваш источник использует один из них.Фактически, поскольку вы пишете «Один байт используется для каждого символа ascii, а два байта используются для каждого символа японского языка», это, вероятно, UTF-8.Это также может быть Shift JIS, но, похоже, вы уже пробовали это.

Если нет, объясните, пожалуйста, каков ваш источник, и приведите примеры байтовых строк (в ASCII / HEX), которые вам даны.

...