nongeneric/lsd2dsl

non-ascii file names in LSA archives

wildekat opened this issue · 2 comments

При распаковке LSA искажаются не-ASCII символы в именах wav-файлов.
Например, если распаковать soundfr.lsa, é (U+00E9) превращается в два символа: U+0413 U+00A9 (d0 93 c2 a9 в UTF-8 вместо c3 a9). Похожее происходит и с другими не-ASCII символами. Система - Win 10. Долго раздумывал, но не смог понять, каким путём идёт это странное преобразование.

Проблема была в том, что файлы создавались с помощью функций не поддерживающих unicode-пути.

А с кодами последовательность, как я понял, такая вышла:

  1. был U+00E9 в словаре (в виде utf16)
  2. lsd2dsl сконвертировал в utf8 "c3 a9" и передал результат как название файла
  3. windows подумала что это windows-1251 (кодировка для не-unicode приложений в панели управления) и получила "Г©"
  4. в файловую систему записались "Г©" в виде U+0413 U+00A9

Поправил работу с путями, должно заработать.

Точно! Что я только не пытался интерпретировать как cp1251, но самое важное - проморгал.
Спасибо большое, теперь всё работает как надо. Закрываю.