convertion UTF8 to ANSI

Тема в разделе "WASM.WIN32", создана пользователем ATX, 10 авг 2009.

  1. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    если есть уверенность, что текст содержит символы только одной кодовой страницы, то можно попытаться "угадать" как я уже указал выше: просканировать полученный unicode-текст, перебирая word-ы - у кого старший байт ненулевой, по нему можно определить страницу. я этим не занимался: нужно или читать доки, или банально просмотреть таблицу символов и выписать варианты. например, если 04h - это кириллица, может быть, 01h - балтийская, и т.п.
    при этом нужно иметь ввиду, что там могут быть кружочки или стрелочки, которые будут иметь совершенно левый старший байт (например, 25h) - это не должно влиять на определение кодовой страницы.

    конечно же работать просто с юникодом гораздо удобнее, но всё зависит от конечного предназначения.
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    + учитывать, что могут попадаться управляющие символы юникода, но в простых случаях их в тексте после работы функции утфВюникод быть не должно.
     
  3. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Не хочу начинать новую тему. Проблема с кодировками. Получаю по сети путь к папке. Например, c:\docs\азбука\. OllyDbg показывает, что кодировка UTF-8. Перевожу строку в Unicode invoke MultiByteToWideChar,CP_UTF8,0,ibuff,-1,tbuff,512. Функция возвращает код ошибки Invalid_flag. Меняю CP_UTF8 на CP_ACP, функция отрабатывает нормально. Возвращает unicode-строку с какими-то краказябликами. Впихиваю эту строку в функцию FindFirstFileW, она возвращает path_not_found. Тогда решил перевести в ansi.
    invoke WideCharToMultiByte,1251,0,tbuff,-1,obuff,1024,0,0
    Возвращает мне ту же строку в UTF-8. Пришел к тому от чего уходил.
    Что делать? Не ищет файлы в папках с русскими буквами. Не растет кокос.