Как конвертировать csv преобразование файлов в VS2008
На самом деле я использую CSV-файл для одного из своих проектов, который содержит японский,китайский,английский и испанский языки. Но если я использую этот файл в своем проекте, он считывает значения буфера, даже если мой проект находится в юникоде.
Что я уже пробовал:
I used ini file to read those languages which works fine but only for unicode. As far as multi-byte is concerned only English and Spanish are read correctly.
Jochen Arndt
Вы должны рассказать нам, какая кодировка используется в CSV-файлах и как вы их читаете и конвертируете кодировку.
Китайские и японские кодовые страницы-это настоящие многобайтовые (более одного байта на символ), в то время как латинские языки-это кодовые страницы ANSI (один байт). При обращении с настоящим многобайтовые, есть только несколько API-функций, которые должны быть использованы. Возможно, ваш код этого не делает. Однако в настоящее время вы всегда должны создавать приложения Unicode и конвертировать входные данные, если они используют данные на основе кодовых страниц.
Member 13323088
Я тоже занимался проектом Unicode mfc.. Имея ту же самую проблему,что и я,Я не мог читать японский, китайский, испанский языки из csv-файла...
Member 13323088
bool CSVFile::ReadData(CStringArray &arr)
{
// Проверьте правильный режим в отладочной сборке
ASSERT(m_nMode == modeRead);
// Читать следующую строку
Однако слайн;
if (!ReadString(sLine))
возвращать false;
LPCTSTR p = sLine;
int nValue = 0;
// Разбор значений в этой строке
в то время как (*p != '\0')
{
CString s; // строка для хранения этого значения
если (*p == '"')
{
// Удар мимо открывающей кавычки
p++;
// Анализировать приведенное значение
в то время как (*p != '\0')
{
// Тест на символ цитаты
если (*p == '"')
{
// Нашел одну цитату
p++;
// Если пара котировок, держите одну
// Else интерпретируется как конец значения
если (*p != '"')
{
p++;
перерыв;
}
}
// Добавьте этот символ в значение
С. AppendChar(*Р++);
}
}
еще
{
// Разбор значения без кавычек
в то время как (*p != '\0' && *p != ',')
{
С. AppendChar(*Р++);
}
// Переход к следующему символу (если еще не конец строки)
если (*p != '\0')
p++;
}
// Добавьте эту строку в массив значений
если (nValue &ЛТ; обр. GetCount())
arr[nValue] = s;
еще
ОБР.Добавить(с);
nValue++;
}
// Обрезать все неиспользуемые значения массива
если (обр. GetCount() &ГТ; nValue)
arr.RemoveAt(nValue, arr.GetCount() - nValue);
// Мы возвращаем true, если ReadString() преуспел-даже если нет значений
вернуть true;
}
чтобы прочитать csv-файл.