|
3 / 2 / 2
Регистрация: 14.12.2009
Сообщений: 149
|
|
Linux кириллица в файлах26.08.2020, 01:14. Показов 9937. Ответов 24
Метки нет (Все метки)
здравствуйте
вопрос: как работать с файлами в линукс, если в них присутствует кириллица? если открываю используя fstream и считываю getline то на месте кириллических символов символы с отрицательными кодами если открываю используя wfstream и считываю также getline, то на месте первого кириллического символа завершающий символ '\0'
0
|
|
| 26.08.2020, 01:14 | |
|
Ответы с готовыми решениями:
24
Кириллица в файлах |
|
Почетный модератор
11560 / 4354 / 453
Регистрация: 12.06.2008
Сообщений: 12,456
|
|
| 27.08.2020, 22:59 | |
|
Если нужно обрабатывать строку, то удобнее переводить в wchar_t. Я не знаю, как это сделать правильно. Могу предложить три варианта:
1. Использовать функции mbsinit, mbsrtowcs (с предварительным вызовом setlocale). 2. Использовать какую-нибудь библиотеку (например, iconv) для перевода кодировки из UTF-8 в UTF-32 (которая используется для wchar_t в Linux). 3. Написать свою функцию для перевода кодировки.
0
|
|
|
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,939
|
|
| 28.08.2020, 08:51 | |
|
Humanoid, если речь именно о работе с wchar_t (кстати, под windows это ущербный utf-16, который объединяет недостатки и utf-8 и utf-32, так что там от него преимуществ практически нет), то логично либо mbstowcs если исходная строка в utf-8, либо сразу читать в wchar_t при помощи специальных функций вроде fgetws, аналогов для scanf и printf (формат "ls" либо "%S").
2. iconv скорее для работы с устаревшими кодировками вроде cp1251, 866, koi8-r и т.д. Если писать свою программу, скорее всего можно будет без этого обойтись. 3. А вот это придется делать если нужна совсем жесткая обработка вроде сортировки (в разных локалях разные правила), перевода в верхний-нижний регистры (там соответствие не взаимооднозначное). Ну и диактрические символы, куда ж без них. В обычных кодировках вроде тех же utf-8, utf-32 хранится отдельно символ, отдельно все эти черточки и точки сверху и снизу. То есть для совсем правильной обработки их надо как-то к символу привязать.
0
|
|
|
3 / 2 / 2
Регистрация: 14.12.2009
Сообщений: 149
|
||||||||||||||||
| 30.08.2020, 00:28 [ТС] | ||||||||||||||||
|
Еще раз поясню.
Для примера есть файл, его содержимое это одна строка "one два three". Если я его считываю так:
a1[0] = {char} 111 'o' a1[1] = {char} 110 'n' a1[2] = {char} 101 'e' a1[3] = {char} 32 ' ' a1[4] = {char} -48 '\320' a1[5] = {char} -76 '\264' a1[6] = {char} -48 '\320' a1[7] = {char} -78 '\262' a1[8] = {char} -48 '\320' a1[9] = {char} -80 '\260' a1[10] = {char} 32 ' ' a1[11] = {char} 116 't' a1[12] = {char} 104 'h' a1[13] = {char} 114 'r' a1[14] = {char} 101 'e' a1[15] = {char} 101 'e' a1[16] = {char} 0 '\000' Например, если:
b1[0] = {wchar_t} 111 L'o' b1[1] = {wchar_t} 110 L'n' b1[2] = {wchar_t} 101 L'e' b1[3] = {wchar_t} 32 L' ' b1[4] = {wchar_t} 1076 L'д' b1[5] = {wchar_t} 1074 L'в' b1[6] = {wchar_t} 1072 L'а' b1[7] = {wchar_t} 32 L' ' b1[8] = {wchar_t} 116 L't' b1[9] = {wchar_t} 104 L'h' b1[10] = {wchar_t} 114 L'r' b1[11] = {wchar_t} 101 L'e' b1[12] = {wchar_t} 101 L'e' b1[13] = {wchar_t} 0 L'\000' Вот это я и хотел бы наблюдать, открыв файл и считав из него строку. Попытка использовать mbsrtowcs к успеху не приводит:
b1[0] = {wchar_t} 111 L'o' b1[1] = {wchar_t} 110 L'n' b1[2] = {wchar_t} 101 L'e' b1[3] = {wchar_t} 32 L' ' b1[4] = {wchar_t} -46891148 L'\xfd347f74' b1[5] = {wchar_t} 32712 L'翈' b1[6] = {wchar_t} 1 L'\001' b1[7] = {wchar_t} 32764 L'翼' b1[8] = {wchar_t} -1 L'\xffffffff' b1[9] = {wchar_t} 0 L'\000' b1[10] = {wchar_t} -46591609 L'\xfd391187' b1[11] = {wchar_t} 32712 L'翈' b1[12] = {wchar_t} -48685248 L'\xfd191f40' b1[13] = {wchar_t} 32712 L'翈'
0
|
||||||||||||||||
|
Почетный модератор
11560 / 4354 / 453
Регистрация: 12.06.2008
Сообщений: 12,456
|
|
| 30.08.2020, 01:12 | |
|
0
|
|
|
3 / 2 / 2
Регистрация: 14.12.2009
Сообщений: 149
|
|
| 30.08.2020, 10:21 [ТС] | |
|
0
|
|
| 30.08.2020, 10:21 | |
|
Помогаю со студенческими работами здесь
25
Кириллица в bat-файлах
Какая СУБД хранит данные в файлах с расширением .dat и индексы в файлах .k01, k02 и т.д.? [Mono] Подскажите ide c# под linux чтобы компилировался файл для linux Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|