Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 17
RAD 2009-XE3

Перекодировка в GB2312

20.12.2018, 13:52. Показов 2101. Ответов 9

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Пишу программу переводчик с использованием Яндекс-API. Перевод реализовал в двух режимах: ручном, т.е. два поля, в одном текст ввода, во-втором перевод с сервера; и автоматическом, т.е. с возможностью переводить все текстовые(можно html/xml) файлы в указанной папке. Собственно функционал реализован, но при работе столкнулся с китайскими файлами кодировки GB2312. Если передавать иероглифы напрямую из Memo, то с переводом нет проблем, но при попытке подгрузить тот же китайский текст из файла получаю кракозябры кодировки Windows-1251. Собственно вопрос: как перекодировать текст обратно из windows-1251 в gb2312, чтобы передавать серверу иероглифы или обойти процедуру перекодировки, прикрепляю код того что делал(пока не помогло)
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm2::Button1Click(TObject *Sender) {
    if(OpenDialog1->Execute()){
          Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
       }
}
void __fastcall TForm2::Button2Click(TObject *Sender)
{
Memo1->Lines->Text= StringOf(TEncoding::Convert(TEncoding::GetEncoding(1251),TEncoding::GetEncoding(936),Memo1->Lines->Text.BytesOf()));
}
На первом скрине оригинал вставленый вручную(он же желаемый результат).
На втором результат подгрузки файла.
На третьем результат перекодировки.
Миниатюры
Перекодировка в GB2312   Перекодировка в GB2312   Перекодировка в GB2312  

0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.12.2018, 13:52
Ответы с готовыми решениями:

Как конвертировать строку из Unicode GB2312
Знаний как таковых в С++ нет, а хочется на ардуине проект запустить. К примеру есть текст Если использовать онлайн декодер, то...

Перекодировка
Помогите,пожалуйста.Как в командной строке перекодировать MessageBundle.txt в MesageBundle.properties. Что необходимо написать перед...

перекодировка
что записать в data segment исходя из данных в memory C0 F1 F1 F5 EC E1 EB E5 F0 20 2D 20 E1 E0 E7 EE E2 FB E9 20 FF E7 FB EA 20...

9
51 / 39 / 15
Регистрация: 20.09.2018
Сообщений: 163
20.12.2018, 14:36
Сохраняй исходные файлы в кодировке "Юникод" как на скриншоте
Миниатюры
Перекодировка в GB2312  
1
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 17
20.12.2018, 14:55  [ТС]
Цитата Сообщение от RomanSedyshev Посмотреть сообщение
Сохраняй исходные файлы в кодировке "Юникод" как на скриншоте
Не все так просто. У меня большой объём файлов, хранятся они(именно с китайским) в формате xml. Работать с каждым файлом и пересохранять текст очень долго, поэтому обрабатываю программно. Распарсерив каждую xml и вынув текст я могу его либо пересохранить в txt, но я не знаю как программно указать блокноту, что это именно Unicode, либо пытаться перекодировать, опять же, не получилось, пока что...
0
51 / 39 / 15
Регистрация: 20.09.2018
Сообщений: 163
20.12.2018, 16:11
Приложи один файл посмотреть
0
Модератор
 Аватар для D1973
9915 / 6452 / 2455
Регистрация: 21.01.2014
Сообщений: 27,385
Записей в блоге: 3
20.12.2018, 17:48
Цитата Сообщение от kuton93 Посмотреть сообщение
но я не знаю как программно указать блокноту, что это именно Unicode
Создавайте СтрингЛист,
C++
1
std::auto_ptr<TStringList> L (new TStringList);
разбирайте свой xml на запчасти (ненавижу слово "парсить"), записывайте "запчасти" в этот самый СтрингЛист, а потом сохраняйте его в любой файл в какой угодно кодировке...
C++
1
L->SaveToFile("aaa.txt", TEncoding::UTF8);
1
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 17
20.12.2018, 18:10  [ТС]
Цитата Сообщение от RomanSedyshev Посмотреть сообщение
Приложи один файл посмотреть
xml подгружать нельзя, ".doc" в имени файла убери и посмотришь...
Вложения
Тип файла: doc XHZYT0002_20181101.XML.doc (1.6 Кб, 3 просмотров)
0
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 17
20.12.2018, 18:23  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Создавайте СтрингЛист,
C++Выделить код
1
std::auto_ptr<TStringList> L (new TStringList);
разбирайте свой xml на запчасти (ненавижу слово "парсить"), записывайте "запчасти" в этот самый СтрингЛист, а потом сохраняйте его в любой файл в какой угодно кодировке...
C++Выделить код
1
L->SaveToFile("aaa.txt", TEncoding::UTF8);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm2::Button2Click(TObject *Sender)
{
TStringList *f = new TStringList();
    UnicodeString buf1, buf2, buf3;
    f->LoadFromFile(OpenDialog1->FileName);
    buf1 = f->Text;
    buf3 = f->Text;
    if (buf1.Pos("<DataContent><![CDATA[") != 0) {
        buf1 = buf1.SubString(buf1.Pos("<DataContent><![CDATA[") + 22,
            buf1.Length());
        buf2 = buf1;
        buf2.SetLength(buf2.Pos("]]"));
    }
    else if (buf3.Pos("<Body>") != 0) {
        buf3 = buf3.SubString(buf3.Pos("<Body>") + 6, buf3.Length());
        buf2 = buf3;
        buf2.SetLength(buf2.Pos("</Body>"));
    }
    f->Text=buf2;
    f->SaveToFile("aaa.txt", TEncoding::GetEncoding(936));
    delete(f);
}
Попробовал ваш код, результат на скрине, в функции код разделения на запчасти(там две вариации xml возможны), файл прикреплен в сообщении выше
Миниатюры
Перекодировка в GB2312  
0
Модератор
 Аватар для D1973
9915 / 6452 / 2455
Регистрация: 21.01.2014
Сообщений: 27,385
Записей в блоге: 3
20.12.2018, 19:06
Лучший ответ Сообщение было отмечено kuton93 как решение

Решение

Что не так?
Миниатюры
Перекодировка в GB2312  
3
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 17
21.12.2018, 02:08  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Что не так?
Да ВЫ гений! Я и не знал, что можно декодировать на стадии подгрузки файла, выкладываю доработанный код разбора, может кому вдруг...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    TStringList *f = new TStringList();
    UnicodeString buf1, buf2;
    f->LoadFromFile(OpenDialog1->FileName, TEncoding::GetEncoding(936));
    Memo1->Text=f->Text;
    buf1 = Memo1->Text;
    if (buf1.Pos("<DataContent><![CDATA[") != 0) {
        buf1 = buf1.SubString(buf1.Pos("<DataContent><![CDATA[") + 22,
            buf1.Length());
        buf2 = buf1;
        buf2.SetLength(buf2.Pos("]]"));
    }
    else if (buf1.Pos("<Body>") != 0) {
        buf1 = buf1.SubString(buf1.Pos("<Body>") + 6, buf1.Length());
        buf2 = buf1;
        buf2.SetLength(buf2.Pos("</Body>"));
    }
    Memo1->Text=buf2;
    delete(f);
Задачу считаю решенной, спасибо за оперативную помощь!
Миниатюры
Перекодировка в GB2312  
0
21.12.2018, 06:40

Не по теме:

Бедные китайцы, как они это вообще читают :(

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.12.2018, 06:40
Помогаю со студенческими работами здесь

Перекодировка БД
Доброго времени суток, интересует такой вопрос открываю базу данных в SQLite Expert Pro, вместо читаемого текста черные ромбики с знаком...

перекодировка
задача: перекодировка текстового файла в код морзе и обратно. срочно надо,помогите кто чем сможет

Перекодировка текста
Здравствуйте! Не знаю в каком разделе создать тему, напишу здесь. Возникла такая ситуация: Перекодировала текст в UTF 8 и сохранила,...

Перекодировка символов
Добрый день, есть строка в лог-файле вида как на скриншоте, нужно перловым скриптом декодировать ее в строку на кириллице, подскажите...

Перекодировка скрипта?
Подскажите пожалуйста кто сталкивался с подобным.Установил англоязычный скрипт,хотел заменить все меню с Английского на Русский язык.Но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru