4 / 4 / 2
Регистрация: 19.08.2013
Сообщений: 26
|
||||||
1 | ||||||
Чтение Unicode15.09.2013, 16:25. Просмотров 4233. Ответов 24
Метки нет Все метки)
(
Есть файл в кодировке Unicode. Надо вывести его содержимое в другой файл и в консоль. Использую двухбайтовый тип wchar, но вместо текста выводятся закорючки, причём в выходном файле и консоли они разные.
Никто с этим не сталкивался? ![]()
0
|
|
15.09.2013, 16:25 | |
Чтение из файла unicode-символов
Чтение UNICODE символов из STDOUT процесса |
|
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
15.09.2013, 16:35 | 2 | |||||
Ещё как сталкивались... Как вариант (из файла на консоль):
1
|
4 / 4 / 2
Регистрация: 19.08.2013
Сообщений: 26
|
|
15.09.2013, 17:40 [ТС] | 3 |
Не работает к сожалению.
Ввожу в файл "(((F)˅(G))→(H))". В буфер buff считывается [-17, -69, -65, 40, 40, 40, 70, 41, -53, -123, 40, 71, 41, 41, -30, -122, -110, 40, 72, 41, 41]. В wbuff [65279, 40, 40, 40, 70, 41, 709, 40, 71, 41, 41, 8594, 40, 72, 41, 41]. Но wcout << wbuff; или wcout<<wbuff[i]; не выводят ничего
0
|
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
15.09.2013, 17:57 | 4 |
Про ввод в файл ничего не знаю. В коде, который я предложил, никакого ввода нет. Как у вас ввод сделан, нужно отдельно разбираться.
У вас не работает... Файл давайте, проверю как у меня будет.
0
|
4 / 4 / 2
Регистрация: 19.08.2013
Сообщений: 26
|
|
15.09.2013, 18:27 [ТС] | 5 |
Я неправильно выразился. С клавиатуры в файл ничего не ввожу. Нужно достать данные из файла(включая символы, которых нет в стандартной кодировке) и дальше работать с ним, как с обычным массивом символов для построения синтаксического анализатора.
0
|
4 / 4 / 2
Регистрация: 19.08.2013
Сообщений: 26
|
|
15.09.2013, 19:29 [ТС] | 7 |
0
|
4 / 4 / 2
Регистрация: 19.08.2013
Сообщений: 26
|
|
15.09.2013, 19:32 [ТС] | 9 |
0
|
15.09.2013, 19:33 | 11 | |||||
В файле есть символы, которых нет в 866-й кодировке, поэтому вывод прерывается, как только встречается такой символ. Вот измененный кусок кода от alsav22, где несуществующие символы заменяются на "@":
2
|
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
15.09.2013, 19:56 | 12 | |||||
Вот код, с дополнениями zer0mail, который более или менее работает. Если BOM есть, то пропускает:
1
|
4 / 4 / 2
Регистрация: 19.08.2013
Сообщений: 26
|
|
15.09.2013, 20:13 [ТС] | 13 |
0
|
129 / 1 / 1
Регистрация: 16.12.2019
Сообщений: 33
|
||||||
24.02.2020, 20:37 | 15 | |||||
Ребята, черт знает как в 13 году было, НО! Если вам консоль, то есть функции (я вам кусочек своего кода кидаю, ибо мне для проверки костыля понадобилась консоль и тип wchar_t, если я правильно понимаю кое-что, в общем для файла они также называются, но я их не тестил, просто только что видел, но для консоли с типом wchar_t все батрачит)
0
|
2719 / 1669 / 347
Регистрация: 09.09.2017
Сообщений: 6,931
|
||||||
25.02.2020, 10:49 | 16 | |||||
Код
$ g++ main.c $ ./a.out ЫЫ c: � Во-вторых, стандартная виндовая консоль ужасно кривая и старается не отображать юникод когда только может. Но ее можно заставить:
Код
$ gcc main.c $ ./a.out x²+7x+4 Да, напомню очевидное: файл исходного кода должен быть в UTF-8. Впрочем, в крайнем случае можно и в ASCII, но тогда юникодные символы придется задавать кодами, как в моем коде '\u00B2'. Читаемость, конечно, снизится.
0
|
129 / 1 / 1
Регистрация: 16.12.2019
Сообщений: 33
|
|
25.02.2020, 11:04 | 17 |
Он у меня на вижаке 2019 windows 10 спокойно работает, однако, символов многих и правда нет. Например признак конца строки '\0', можно подробнее о том, каким образом вы сам сиивол Unicode заменили кодом? Я так понимаю \uкод из ASCII шестнадцатиричный?
0
|
2719 / 1669 / 347
Регистрация: 09.09.2017
Сообщений: 6,931
|
|
25.02.2020, 12:37 | 18 |
Не понял вопроса. Мой код вы видите, представление символа '²' в виде кода тоже. Для русских букв можно брать коды '\u0410' - '\u042F' (заглавные) и '\u0430' - '\u044f' (строчные).
Код из 15 поста не работает с Юникодом. В лучшем случае - с какой-то устаревшей однобайтной кодировкой вроде cp1251. Это легко проверить если вывести значение символа как число: printf("%u\n", (unsigned int)ch); . Проверьте это на своем коде и на моем. Логика подсказывает результат 219 для вашего варианта и 1067 (оно же 0x042B) для моего.
1
|
Модератор
![]() ![]() 4004 / 3513 / 622
Регистрация: 07.10.2015
Сообщений: 7,260
|
|||||||||||
25.02.2020, 13:08 | 19 | ||||||||||
COKPOWEHEU, почему-то у меня в MS2017, Win7 не воспринимается
__attribute__((constructor)) Если записать
0
|
2719 / 1669 / 347
Регистрация: 09.09.2017
Сообщений: 6,931
|
||||||
25.02.2020, 13:32 | 20 | |||||
Возможно, это gcc-специфичная штука.
Для себя постепенно пишу слой кроссплатформенности, и как раз сегодня добавлял эту функцию вот в таком виде:
0
|
25.02.2020, 13:32 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. CStdioFile не поддерживает чтение файлов в формате Unicode. Что делать?
Открыть текстовый файл в необходимом режиме (на чтение, на чтение и запись, на добавление) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |