Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > ANSI -> UTF-8 etc


Автор: Andrey_Skif 3.9.2007, 17:57
Проблема возникла следующая. При открытии текста в формате UTF-8 (при выводе его в textBox) отображается нечто непонятное.

Вопрос, соответственно, такой: как сделать, чтобы текст выглядел так, как надо.
        А кроме того, как текст, открытый в одном фориате, пересохранить в другом (формате).

Кстати (может это важно, а может и нет - не знаю), формат открываемого текста заранее неизвестен. Может быть или ANSI или UTF-8.

Автор: Akina 3.9.2007, 18:49
Цитата(Andrey_Skif @  3.9.2007,  18:57 Найти цитируемый пост)
как сделать, чтобы текст выглядел так, как надо

Использовать (системную) функцию преобразования.

Цитата(Andrey_Skif @  3.9.2007,  18:57 Найти цитируемый пост)
формат открываемого текста заранее неизвестен. Может быть или ANSI или UTF-8. 

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

Автор: Andrey_Skif 3.9.2007, 19:12
Цитата

Цитата

как сделать, чтобы текст выглядел так, как надо 



Использовать (системную) функцию преобразования.


Хорошо, но скажи какую именно функцию и как использовать. То, что надо чего-то и как-то использовать я и сам понимаю. smile 
Цитата

Цитата

формат открываемого текста заранее неизвестен. Может быть или ANSI или UTF-8.  



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


С этого места поподробнее...

А вообще-то, я исключительно для личного пользования написал программку, которая немного корректирует субтитры (SRT формат, если что). Так вот, там кодировка разная попадается, так что выбирать не приходится и это не моя прихоть. А что касается определения кодировки, то можно также поподробнее (или ссылка). Пожалуйста, если не трудно. smile 

Автор: Akina 3.9.2007, 22:19
Цитата(Andrey_Skif @  3.9.2007,  20:12 Найти цитируемый пост)
какую именно функцию и как использовать

Код

Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Declare Function CharToOemBuff Lib "user32" Alias "CharToOemBuffA" (ByVal lpszSrc As String, ByVal lpszDst As String, ByVal cchDstLength As Long) As Long
Declare Function OemToCharBuff Lib "user32" Alias "OemToCharBuffA" (ByVal lpszSrc As String, ByVal lpszDst As String, ByVal cchDstLength As Long) As Long
Эти и аналогичные для прочих кодировок. В общем, копай API около этих функций.

Цитата(Andrey_Skif @  3.9.2007,  20:12 Найти цитируемый пост)
С этого места поподробнее...

Алгоритмы определения кодировок основаны на 2 принципах: определение невалидности данного символа в данной кодировке (отсев заведомо неверных кодировок) и частотный анализ вхождения символов (выбор кодировки из возможных). Если первый этап работает правильно при корректном тексте (например chr(0) невозможен в СР866), то второй всегда дает лишь вероятностное решение, улучшение которого возможно лишь в тандеме с проверкой по словарю. 

PS. Плотно этими вопросами не занимался, так что могу дать лишь самое общее направление, в котором можно начинать поиск.

Автор: Andrey_Skif 4.9.2007, 23:13
 smile Спасибо большое!!! smile 

Отдельный респект за краткий обзор алгоритмов определения кодировок. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)