0 / 0 / 0
Регистрация: 26.01.2023
Сообщений: 1
1

Не отображает правильно текст из одной кодировки в другую

26.01.2023, 17:02. Показов 2986. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я модифицирую filezilla как клиент, так и сервер. Можно установить лимит и если размер файла его не превышает, то он добавляется в архив. И так можно целую папку с кодом отправить, и отправиться архив на сервер. А сервер архив распакует.

Я использую библиотеку libzip и собираю приложения в msys64.

Есть проблема в кодировке. Я попробовал перекинуть v8 js движок и обнаружил вот такие разногласия в названиях.
Код
$ ./check_dirs.sh
6261,6262c6261,6262
< ./test/message/unicode-filename-.js
< ./test/message/unicode-filename-.out
---
> ./test/message/unicode-filename-🎅🎄.js
> ./test/message/unicode-filename-🎅🎄.out
Код
for (zip_uint64_t i = 0; i < entries; i++) {
		zip_file_t *fil = zip_fopen_index (p, i, ZIP_FL_COMPRESSED);
		zip_fseek (fil, 0, SEEK_END);
		unsigned long sizeFile = zip_ftell (fil);
		zip_fseek (fil, 0, SEEK_SET);

		const char *name = zip_get_name (p, i, ZIP_FL_ENC_GUESS);
		int len = strlen (name);

		std::string nm(name);
		//std::cout << "what is name: " << nm << std::endl;

#if 0
		std::wstring_convert<std::codecvt_utf8<char16_t>, char16_t> utfconv;

		std::u16string ou = utfconv.from_bytes(nm);

		std::wstring out(ou.begin(), ou.end());
#endif
		auto const &f = std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t>>(std::locale());
		std::mbstate_t mb = std::mbstate_t();
		std::string external = nm;
		std::wstring internal(nm.size(), '\0');
		const char *from_next;
		wchar_t *to_next;
		f.in(mb, &external[0], &external[external.size()], from_next,
				&internal[0], &internal[internal.size()], to_next);

		internal.resize(to_next - &internal[0]);

		std::wstring out = internal;
		
		len = out.length();

		//std::cout << "cur string length: " << out.length() << std::endl;

		wchar_t filename_c[255];
		int fc = 0;
		wchar_t fullname[512];
		int fn = 0;
		for (int indx = 0; indx < len; indx++) {
			if (indx == 0 && out[indx] == '/') continue;

			if (out[indx] == '/' || out[indx] == '\\') {
				filename_c[fc] = 0;
				std::wstring s(filename_c);
				fullname[fn] = 0;
				std::wstring npath = natPath + L"\\" + fullname;
				mkdir (npath, true, fz::mkdir_permissions::normal);
				fc = 0;
				fullname[fn++] = '\\';
				continue;
			}

			filename_c[fc++] = out[indx];
			fullname[fn++] = out[indx];
		}
		fullname[fn] = 0;

		unsigned char *buf = new unsigned char[sizeFile];
		zip_fread (fil, buf, sizeFile);
		zip_fclose (fil);

		std::wstring npath = natPath + L"\\" + fullname;
		std::ofstream file(npath.c_str(), std::ios::out | std::ios::binary);
		if (!file.is_open()) {
			std::cout << "file is not opened" << std::endl;
		}
		file << buf;
		file.close();
Добавлено через 2 минуты
причем в терминале видно символы деда мороза и елочки.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2023, 17:02
Ответы с готовыми решениями:

Как перекодировать текст из одной кодировки в другую
как перекодировать из неизвестной кодировки в такую чтобы не было непонятных символов?

Кодировки, класс Encoding. Преобразования текстовых файлов из одной кодировки в другую
Вот сама задача: * Написать программу преобразования текстовых файлов из одной кодировки в...

Перевод из одной кодировки в другую
Возможно ли это реализовать в программном коде Visual Basic 6? Если да, то как?

Перевод из одной кодировки в другую
Доброй ночи. Задача вот в чём: откр ыть файл(тхт) и из одной кодировки перевести в другую. например...

Перевод из одной кодировки в другую
Как имея текстовый документ в какой либо кодировке перевести его в другую?

0
26.01.2023, 17:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2023, 17:02
Помогаю со студенческими работами здесь

Перевод текста из одной кодировки в другую
bНъЖюEиP‹ѕBѓx‰ёпґ‚&lt;їNTМhЬфZЬ“8Т=.Kм†;-‹|KpуЧ…gнZЄтЌ`Пi/E8з,Yцwя“Uй7ъdКbжёЂtфk§блє~сjЧKOт+щzе…...

Перевод текста из одной кодировки в другую
Здравствуйте. У меня вот какая проблема. Вчера писал курсовой проект по ассемблеру и нужно было код...

Перевод строки из одной кодировки в другую
Необходимо реализовать программно алгоритм перевода строки символов из кодировки ANSI в кодировку...

Перевести строку из одной кодировки в другую
Нужно написать программу, перекодирующую строку в кодировке KOI в строку в кодировке Windows-1251 и...

Перевести строку из одной кодировки в другую
Всем привет.Подскажите как можно строку перевести из одной кодировки в другую?


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru