Igor-84 Ответов: 3

Как декодировать текст UTF-8 в читаемый массив символов C ++


Привет! У меня есть файл, который содержит (английские и кириллические слова):
\u0074\u0065\u0078\u0074\u0442\u0435\u043a\u0441\u0442

Используя метод ifstream и read (), скопируйте содержимое файла в массив char.

Что я уже пробовал:

std::ifstream file("d:/example.txt", std::ios::in | std::ios::binary);
char buffer[128] = "";
file.seekg(0, ios::end);
int data_len = (int)file.tellg();
file.seekg(0, ios::beg);

file.read(buffer, data_len);

А когда выводите буфер в MessageBox, то он будет отображаться как есть - не декодируется.

Как декодировать текст, содержащий английские и кириллические слова, в массив символов?

3 Ответов

Рейтинг:
2

Afzaal Ahmad Zeeshan

Хотя я еще не пробовал этого, но я считаю, что вам нужно будет изменить чтение данных с обычных байтов (char) на широкие байты (wchar_t). Ваши данные теряются, когда вы их читаете, потому что вы можете читать их байт за байтом, а Юникод в этом случае печально известен.

// I just shamelessly copied this code from https://stackoverflow.com/a/901617/1762944
ifstream file; 
file.open("k:/test.txt", ifstream::in|ifstream::binary);

wchar_t buffer[2048]; 
file.seekg(2);
file.read((char*)buffer, line_length);
wprintf(L"%s\n", buffer);
file.close();
Видеть здесь, visual c++ - чтение файлов Unicode C++ - переполнение стека[^]
Широкий характер - Википедия[^]
Обзор Кодирования - Глобализация | Microsoft Docs[^]


Рейтинг:
1

Richard MacCutchan

Видеть Обработка простых текстовых файлов на языке C/C++[^] для преобразования многобайтового кода (UTF8) в Unicode.


Рейтинг:
0

steveb

использовать

std::wfstream


вместо