ifstream utf-16 -> utf-8
От: KaktusAgava  
Дата: 28.12.12 04:58
Оценка:
Привет всем.

У меня такой вопрос: мне нужно получить ifstream файла, который в кодировке utf-16, с автоматическим преобразованием в utf-8.
Visual Studio 2010.

Есть подозрение, что это делается с помощью codecvt_utf8, но я никак не догоняю как его использовать

В общем, мне нужно примерно так:

ifstream infile;
infile.open("c:\\temp\\example-utf16.txt", ios::in);
if (infile.is_open())
{
std::string s;
getline(infile, s); //в s д.б. utf-8
}
Re: WideCharToMultiByte
От: Qbit86 Кипр
Дата: 28.12.12 05:44
Оценка: -1
Здравствуйте, KaktusAgava, Вы писали:

KA>У меня такой вопрос: мне нужно получить ifstream файла, который в кодировке utf-16, с автоматическим преобразованием в utf-8.


Для автоматического преобразования, возможно, нужен декоратор над WideCharToMultiByte.
Глаза у меня добрые, но рубашка — смирительная!
Re: ifstream utf-16 -> utf-8
От: Хон Гиль Дон Россия  
Дата: 28.12.12 08:31
Оценка:
Здравствуйте, KaktusAgava, Вы писали:


KA>У меня такой вопрос: мне нужно получить ifstream файла, который в кодировке utf-16, с автоматическим преобразованием в utf-8.

KA>Visual Studio 2010.

KA>Есть подозрение, что это делается с помощью codecvt_utf8, но я никак не догоняю как его использовать


KA>В общем, мне нужно примерно так:


KA>ifstream infile;

KA>infile.open("c:\\temp\\example-utf16.txt", ios::in);
KA>if (infile.is_open())
KA>{
KA>std::string s;
KA>getline(infile, s); //в s д.б. utf-8
KA>}

Насколько помню, что-то типа:

infile.imbue(std::locale(infile.getloc(), new codecvt_utf8));


в начале работы.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re: ifstream utf-16 -> utf-8
От: thrandawill  
Дата: 30.12.12 14:24
Оценка: -2 :)
Здравствуйте, KaktusAgava, Вы писали:

KA>Привет всем.


KA>У меня такой вопрос: мне нужно получить ifstream файла, который в кодировке utf-16, с автоматическим преобразованием в utf-8.

KA>Visual Studio 2010.

KA>Есть подозрение, что это делается с помощью codecvt_utf8, но я никак не догоняю как его использовать


KA>В общем, мне нужно примерно так:


KA>ifstream infile;

KA>infile.open("c:\\temp\\example-utf16.txt", ios::in);
KA>if (infile.is_open())
KA>{
KA>std::string s;
KA>getline(infile, s); //в s д.б. utf-8
KA>}

Пользуйтесь билдером codegear. Visual только для специалистов микросовт.
Re: ifstream utf-16 -> utf-8
От: igna Россия  
Дата: 03.01.13 11:14
Оценка:
Здравствуйте, KaktusAgava, Вы писали:

KA>У меня такой вопрос: мне нужно получить ifstream файла, который в кодировке utf-16, с автоматическим преобразованием в utf-8.


KA>Есть подозрение, что это делается с помощью codecvt_utf8, но я никак не догоняю как его использовать


codecvt_utf8 используется в случае, когда файл в кодировке utf-8, а при чтении нужно преобразовать в ucs-2 или ucs-4. Фацет для твоего случая в стандартной библиотеке отсутствует, по аналогии с именами стандартных фацетов его имя должно быть codecvt_utf16_utf8.
Re[2]: WideCharToMultiByte
От: Abyx Россия  
Дата: 03.01.13 16:28
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Для автоматического преобразования, возможно, нужен декоратор над WideCharToMultiByte.


и как его прикрутить к ifstream?
In Zen We Trust
Re: ifstream utf-16 -> utf-8
От: Denys V. Украина http://ua.linkedin.com/in/dvalchuk
Дата: 06.01.13 15:29
Оценка: 1 (1)
Здравствуйте, KaktusAgava, Вы писали:

KA>Привет всем.


KA>У меня такой вопрос: мне нужно получить ifstream файла, который в кодировке utf-16, с автоматическим преобразованием в utf-8.

KA>Visual Studio 2010.

KA>Есть подозрение, что это делается с помощью codecvt_utf8, но я никак не догоняю как его использовать


KA>В общем, мне нужно примерно так:


KA>ifstream infile;

KA>infile.open("c:\\temp\\example-utf16.txt", ios::in);
KA>if (infile.is_open())
KA>{
KA>std::string s;
KA>getline(infile, s); //в s д.б. utf-8
KA>}

UTF8-CPP: UTF-8 with C++ in a Portable Way
там и пример есть
С уважением Denys Valchuk

IMHO чем больше мнений тем оптимальней выбор варианта... :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.