4 / 4 / 5
Регистрация: 28.04.2010
Сообщений: 162
|
|
1 | |
Перевод кодировки01.08.2011, 16:43. Показов 19052. Ответов 10
Метки нет Все метки)
(
Всем привет!
Такая задача Имеем html-код Знаем кодировку (charset) Если кодировка, отличная от UTF-8 - нужно выполнить преобразование к UTF-8 Какими способами (желательно, без использования сторонних библиотек и функционала, таких как boost, QT и т.д.) привести текст к нужной кодировке? Есть ссылка на хабрахабр с описанием - Кодировки в C++ - к сожалению, не подходит, потому что там используется boost. Буду признателен за любые ответы ![]()
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
01.08.2011, 16:43 | |
Ответы с готовыми решениями:
10
Перевод кодировки Перевод из кодировки UTF - 8 в ANSI
Кодировки (ошибки кодировки) в логировании |
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
|
||||||
01.08.2011, 19:03 | 2 | |||||
2
|
4 / 4 / 5
Регистрация: 28.04.2010
Сообщений: 162
|
||||||
02.08.2011, 11:47 [ТС] | 3 | |||||
Спасибо!
А можешь объяснить, как это работает? Вот функция MultiByteToWideString - это функция преобразования какой-либо кодировки в т.н "широкую" кодировку, т.е. в UTF а функция WideStringToMultiByte - наоборот, из UTF в другую? И какой заголовочный файл нужно подключать, чтобы использовать данные функции? Я пишу на MFC Добавлено через 2 минуты На одном "форуме" нашёл совет А если не ANSI? Добавлено через 3 минуты А ещё есть некая функция loadU..
0
|
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
|
|
02.08.2011, 11:49 | 4 |
MultiByteToWideString преобразует строку из указанной кодировки (например, 1251) в Unicode.
WideStringToMultiByte преобразует из Юникода в любую другую, указываем UTF8. Вот и вся магия. Обе функции описаны в MSDN. Работа за пару минут делается. Заголовочник windows.h. Все остальные функции/макросы - от лукавого, все равно внутри вызывают именно эти две.
1
|
4 / 4 / 5
Регистрация: 28.04.2010
Сообщений: 162
|
|
02.08.2011, 11:59 [ТС] | 5 |
Большое спасибо!
Но этот заголовочник не даёт доступ к MultiByteToWideString ![]()
0
|
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
|
|
02.08.2011, 12:45 | 6 |
Прошу прощения, WideCharToMultiByte и MultiByteToWideChar функции называются
1
|
4 / 4 / 5
Регистрация: 28.04.2010
Сообщений: 162
|
||||||
02.08.2011, 15:45 [ТС] | 7 | |||||
Кстати!
А в чём разница MultiByteToWideString и MultiByteToWideChar? В MSDN описана именно вторая функция, и, как я понял, именно её следует использовать Например, как здесь Добавлено через 54 секунды как раз догадался ![]() Добавлено через 18 минут Кстати, заголовочником для этих функций также может быть winnls.h ![]() Добавлено через 2 часа 36 минут Да, кстати, вопрос Не важно, какого типа должна быть строка? CString, LPWSTR, LPSTR, какая-либо ещё? Просто я делаю так:
И в БД, после добавления, символы тоже не меняются Может, я в чём-то ошибся?
1
|
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
|
|
02.08.2011, 15:55 | 8 |
Неправильно. Где вызов WideCharToMultiByte?
И перед выходом из функции неплохо бы удалить pwText
1
|
4 / 4 / 5
Регистрация: 28.04.2010
Сообщений: 162
|
|||||||||||
02.08.2011, 16:18 [ТС] | 9 | ||||||||||
Дада, уже понял
![]() спасибо ![]() Добавлено через 4 минуты
Правда, после выполнения данных операций в res появляются только буквы Н и в конце ещё что-то, явно не то.. ![]() Добавлено через 3 минуты Всё, исправился
![]() Добавлено через 4 минуты Всё, работает ![]() ![]()
1
|
Dimrad
|
|
09.03.2013, 21:27 | 10 |
// ANSI -> UTF8
// чтобы получилось нужно ANSI -> UTF16 -> UTF8 // с помощью макросов ATL CStringA sAnsi = "ВОВА"; CStringW sUtf16 = CA2W(sAnsi, CP_ACP); CStringA sUtf8 = CW2A(sUtf16, CP_UTF8); // И обратно UTF8 -> ANSI // CStringA sAnsi, sUtf8; sUtf8 = "Сканворд"; sAnsi= CA2W(sUtf8, CP_UTF8); |
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
|
||||||
29.10.2014, 17:02 | 11 | |||||
0
|
29.10.2014, 17:02 | |
Помогаю со студенческими работами здесь
11
Кодировки Кодировки в С++
Кодировки в си Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |