Чтение текстовых файлов Unicode в Visual C ++ - PullRequest
1 голос
/ 05 марта 2011

Я пытаюсь прочитать простой текстовый файл Unicode (UTF-16) с несколькими цифрами в Visual C. Это казалось тривиальной задачей, но я не могу заставить его прочитать файл в правильной кодировке.

Мой файл выглядит следующим образом:

1337 42 23

Поскольку он в кодировке Unicode, он также имеет метку 0xFF 0xFE в начале.

Я пробовал wifstream() иfwscanf(), но оба застревают в спецификации, и даже после пропуска спецификации обе функции читают только «1» (они путаются с символом 0x00, то есть фактически не читают файл как юникод).

Итак, вопрос в том, как вы читаете и анализируете простой файл Unicode в Unicode приложении Visual C ++?

Вот мой источник (версия fwscanf):

int _tmain(int argc, _TCHAR* argv[])
{
    int x;
    FILE * f = _wfopen(L"bla.txt", L"r+");
    if (!f) return -1;

    fseek(f, 2, SEEK_SET); // skip the BOM mark

    fwscanf(f, L"%d", &x);
    wprintf(L"Number read: %d\n", x);

    fclose(f);
    return 0;
}

И вывод:

Number read: 1

1 Ответ

3 голосов
/ 05 марта 2011

Microsoft CRT поддерживает автоматическое определение спецификации с VS2005. Вы включаете его, используя атрибут "ccs" в аргументе mode. Как это:

FILE * f = _wfopen(L"c:\\temp\\test.txt", L"rt, ccs=UNICODE");

Возвращается к ansi, если файл не имеет спецификации. Вы можете использовать "UTF-8" или "UTF-16LE" для таких нарушителей спокойствия. Это конечно нестандартно.

...