Я вообще не знаю волоф.Однако я уверен, что проблема в том, что у вас есть файл в смешанной кодировке с нестандартными кодовыми точками (вместо стандартного Unicode) и затем преобразованием в байты с использованием UTF-8 схема. Это грязно!
Способ справиться с этим - сначала прочитать байты в Tcl, используя канал, настроенный для использования кодировки utf-8
:
set f [open $filename]
fconfigure $f -encoding utf-8
set contents [read $f]
close $f
Затем вам нужно применить преобразование, используя string map
, которое преобразует «неправильные» символы в правильные.Например, это будет сделано (насколько я могу судить) для конкретных символов, которые вы перечислили:
set mapping {"\u02c6" "\u00e0"}
set fixed [string map $mapping $contents]
# You should now be able to do anything you want with $fixed
Однако, это может быть все неправильно!Проблема в том, что я не знаю, каким должно быть содержимое файла (на уровне символов, а не байтов).Который возвращается к моему комментарию «Я вообще не знаю волоф».
Обновление
Теперь, когда dan04 определил, что было сделано с этим плохим текстом, я могу предоставить, как декодировать,Прочитайте код, как указано выше, но теперь мы используем другой шаг отображения:
set fixed [encoding convertfrom macRoman [encoding convertto cp1252 $content]]
На предоставленном образце, который дает ожидаемый результат.