Выбор кодировки текста при открытии и сохранении файлов
Как правило, при совместной работе с текстовыми файлами нет необходимости вникать в технические аспекты хранения текста. Однако если необходимо поделиться файлом с человеком, который работает с текстами на других языках, скачать текстовый файл из Интернета или открыть его на компьютере с другой операционной системой, может потребоваться задать кодировку при его открытии или сохранении.
Когда вы открываете текстовый файл в Microsoft Word или другой программе (например, на компьютере, язык операционной системы на котором отличается от того, на котором написан текст в файле), кодировка помогает программе определить, в каком виде нужно вывести текст на экран, чтобы его можно было прочитать.
В этой статье
- Общие сведения о кодировке текста
- Выбор кодировки при открытии файла
- Выбор кодировки при сохранении файла
- Поиск кодировок, доступных в Word
Общие сведения о кодировке текста
То, что отображается на экране как текст, фактически хранится в текстовом файле в виде числового значения. Компьютер преобразует числические значения в видимые символы. Для этого используется кодикон.
Кодировка — это схема нумерации, согласно которой каждому текстовому символу в наборе соответствует определенное числовое значение. Кодировка может содержать буквы, цифры и другие символы. В различных языках часто используются разные наборы символов, поэтому многие из существующих кодировок предназначены для отображения наборов символов соответствующих языков.
Различные кодировки для разных алфавитов
Сведения о кодировке, сохраняемые с текстовым файлом, используются компьютером для вывода текста на экран. Например, в кодировке «Кириллица (Windows)» знаку «Й» соответствует числовое значение 201. Когда вы открываете файл, содержащий этот знак, на компьютере, на котором используется кодировка «Кириллица (Windows)», компьютер считывает число 201 и выводит на экран знак «Й».
Однако если тот же файл открыть на компьютере, на котором по умолчанию используется другая кодировка, на экран будет выведен знак, соответствующий числу 201 в этой кодировке. Например, если на компьютере используется кодировка «Западноевропейская (Windows)», знак «Й» из исходного текстового файла на основе кириллицы будет отображен как «É», поскольку именно этому знаку соответствует число 201 в данной кодировке.
Юникод: единая кодировка для разных алфавитов
Чтобы избежать проблем с кодированием и декодированием текстовых файлов, можно сохранять их в Юникоде. В состав этой кодировки входит большинство знаков из всех языков, которые обычно используются на современных компьютерах.
Так как Word работает на базе Юникода, все файлы в нем автоматически сохраняются в этой кодировке. Файлы в Юникоде можно открывать на любом компьютере с операционной системой на английском языке независимо от языка текста. Кроме того, на таком компьютере можно сохранять в Юникоде файлы, содержащие знаки, которых нет в западноевропейских алфавитах (например, греческие, кириллические, арабские или японские).
Выбор кодировки при открытии файла
Если в открытом файле текст искажен или выводится в виде вопросительных знаков либо квадратиков, возможно, Word неправильно определил кодировку. Вы можете указать кодировку, которую следует использовать для отображения (декодирования) текста.
- Откройте вкладку Файл.
- Нажмите кнопку Параметры.
- Нажмите кнопку Дополнительно.
- Перейдите к разделу Общие и установите флажокПодтверждать преобразование формата файла при открытии.
Примечание: Если установлен этот флажок, Word отображает диалоговое окно Преобразование файла при каждом открытии файла в формате, отличном от формата Word (то есть файла, который не имеет расширения DOC, DOT, DOCX, DOCM, DOTX или DOTM). Если вы часто работаете с такими файлами, но вам обычно не требуется выбирать кодировку, не забудьте отключить этот параметр, чтобы это диалоговое окно не выводилось.
Если почти весь текст выглядит одинаково (например, в виде квадратов или точек), возможно, на компьютере не установлен нужный шрифт. В таком случае можно установить дополнительные шрифты.
Чтобы установить дополнительные шрифты, сделайте следующее:
- Нажмите кнопку Пуск и выберите пункт Панель управления.
- Выполните одно из указанных ниже действий. В Windows 7
- На панели управления выберите раздел Удаление программы.
- В списке программ щелкните Microsoft Office или Microsoft Word, если он был установлен отдельно от пакета Microsoft Office, и нажмите кнопку Изменить.
В Windows Vista
- На панели управления выберите раздел Удаление программы.
- В списке программ щелкните Microsoft Office или Microsoft Word, если он был установлен отдельно от пакета Microsoft Office, и нажмите кнопку Изменить.
В Windows XP
- На панели управления щелкните элемент Установка и удаление программ.
- В списке Установленные программы щелкните Microsoft Office или Microsoft Word, если он был установлен отдельно от пакета Microsoft Office, и нажмите кнопку Изменить.
Совет: При открытии текстового файла в той или иной кодировке в Word используются шрифты, определенные в диалоговом окне Параметры веб-документа. (Чтобы вызвать диалоговое окно Параметры веб-документа, нажмите кнопку Microsoft Office, затем щелкните Параметры Word и выберите категорию Дополнительно. В разделе Общие нажмите кнопку Параметры веб-документа.) С помощью параметров на вкладке Шрифты диалогового окна Параметры веб-документа можно настроить шрифт для каждой кодировки.
Выбор кодировки при сохранении файла
Если не выбрать кодировку при сохранении файла, будет использоваться Юникод. Как правило, рекомендуется применять Юникод, так как он поддерживает большинство символов большинства языков.
Если документ планируется открывать в программе, которая не поддерживает Юникод, вы можете выбрать нужную кодировку. Например, в операционной системе на английском языке можно создать документ на китайском (традиционное письмо) с использованием Юникода. Однако если такой документ будет открываться в программе, которая поддерживает китайский язык, но не поддерживает Юникод, файл можно сохранить в кодировке «Китайская традиционная (Big5)». В результате текст будет отображаться правильно при открытии документа в программе, поддерживающей китайский язык (традиционное письмо).
Примечание: Так как Юникод — это наиболее полный стандарт, при сохранении текста в других кодировках некоторые знаки могут не отображаться. Предположим, например, что документ в Юникоде содержит текст на иврите и языке с кириллицей. Если сохранить файл в кодировке «Кириллица (Windows)», текст на иврите не отобразится, а если сохранить его в кодировке «Иврит (Windows)», то не будет отображаться кириллический текст.
Если выбрать стандарт кодировки, который не поддерживает некоторые символы в файле, Word пометит их красным. Вы можете просмотреть текст в выбранной кодировке перед сохранением файла.
При сохранении файла в виде кодированного текста из него удаляется текст, для которого выбран шрифт Symbol, а также коды полей.
Выбор кодировки
- Откройте вкладку Файл.
- Выберите пункт Сохранить как. Чтобы сохранить файл в другой папке, найдите и откройте ее.
- В поле Имя файла введите имя нового файла.
- В поле Тип файла выберите Обычный текст.
- Нажмите кнопку Сохранить.
- Если появится диалоговое окно Microsoft Office Word — проверка совместимости, нажмите кнопку Продолжить.
- В диалоговом окне Преобразование файла выберите подходящую кодировку.
- Чтобы использовать стандартную кодировку, выберите параметр Windows (по умолчанию).
- Чтобы использовать кодировку MS-DOS, выберите параметр MS-DOS.
- Чтобы задать другую кодировку, установите переключатель Другая и выберите нужный пункт в списке. В области Образец можно просмотреть текст и проверить, правильно ли он отображается в выбранной кодировке.
Примечание: Чтобы увеличить область отображения документа, можно изменить размер диалогового окна Преобразование файла.
Поиск кодировок, доступных в Word
Word распознает несколько кодировок и поддерживает кодировки, которые входят в состав системного программного обеспечения.
Ниже приведен список письменностей и связанных с ними кодировок (кодовых страниц).
Система письменности
Используемый шрифт
Юникод (UCS-2 с прямым и обратным порядком байтов, UTF-8, UTF-7)
Стандартный шрифт для стиля «Обычный» локализованной версии Word
Windows 1256, ASMO 708
Китайская (упрощенное письмо)
GB2312, GBK, EUC-CN, ISO-2022-CN, HZ
Китайская (традиционное письмо)
BIG5, EUC-TW, ISO-2022-TW
Windows 1251, KOI8-R, KOI8-RU, ISO8859-5, DOS 866
Английская, западноевропейская и другие, основанные на латинице
Windows 1250, 1252-1254, 1257, ISO8859-x
Как определить кодировку в текстовом файле (имея в наличии только файл)?
Все зависит от характера файла. Кодировка — это интерпретация только русских букв (и прочих знаков национальных алфавитов, отличных от латиницы, цифр и знаков препинания, . ). В итоге единственная мера — открыть файл в разных кодировках и найти русские буквы там, где они должны быть исходя из характера данных.
Denis211990; + 1 – Ответить
5. ishelper 10.03.22 13:03 Сейчас в теме
без необходимости ввода подстроки поискаБез строки поиска требуется понимание содержания текста. Вряд ли можно рассчитывать в этом на 1С. 😉
Просто строку поиска нужно задавать программно , подбирая ее по частоте использования в языке, возможно — не одну, например, искать: » и «, » не «, «но » и так далее
Denis211990; + 1 – Ответить
11. dehro 5 29.01.23 09:21 Сейчас в теме(1)Однозначно: никак. Текстовый файл: набор байтов, разделённых байтом EOL и заканчивающихся байтом EOF. Никакого заголовка, как например у файла архива или exe-шника, у него нет.
Для двухбайтных кодировок вряд ли что изменилось. Просто теперь это последовательность машинных слов (word), а не одиночных байтов.
Все утилиты путём анализа символов (последовательностей, количества, etc) пытаются угадать кодировку.
13. Said-We 27.03.23 19:38 Сейчас в теме
Требуется определить, какая кодировка используется в файле.
Чтобы предупредить пользователяВ идеале никак.
Браузеры свои алгоритмы сложные имеют и то иногда кракозябры открывают.Но чаще всего это UTF-8. Т.е. каждый символ может занимать от одного байта до 4-х. И всё это в одном и том же тексте. Одновременно.
Английский язык один байт, русский два, грузинский три, азиатские иероглифы 4-ре.ASCII, КОИ-8, UTF-8 первые символы и английские символы максимально совпадают.
КОИ-7 давно не видел.6. cargobird 305 30.11.22 12:36 Сейчас в теме
Такую функцию сделал исходя из предположения, что коды символов всех знаков находятся до 100, а коды символов заглавных букв от А до Я находится в диапазоне 1040-1071. Исключение — Ё с кодом 1025.
Так вот, если при чтении файла с заданной кодировкой встречается символ вне указанных диапазонов — то это битый символ, значит кодировка не та надо прочитать файл с другой кодировкой (и так до победного).
Для небольших файлов пригодилось.Функция ОпределитьКодировкуФайла(ПутьКФайлу) Экспорт мКодировок=Новый Массив; мКодировок.Добавить(КодировкаТекста.ANSI); мКодировок.Добавить(КодировкаТекста.OEM); мКодировок.Добавить(КодировкаТекста.UTF16); мКодировок.Добавить(КодировкаТекста.UTF8); мНайденных=Новый Массив; Для каждого рКодировка Из мКодировок Цикл т=Новый ТекстовыйДокумент; т.Прочитать(ПутьКФайлу,рКодировка); стро=ВРег(т.ПолучитьТекст()); // ВРег это важно Если НЕ НайтиСимволыВнеДиапазона(стро) Тогда // если не найдено ни одного "битого" символа - искомая кодировка Возврат рКодировка; КонецЕсли; КонецЦикла; Возврат КодировкаТекста.ANSI; // по умолчанию КонецФункции Функция НайтиСимволыВнеДиапазона(ТекСтрока) Для Поз = 1 По СтрДлина(ТекСтрока) Цикл ТекКод = КодСимвола(Сред(ТекСтрока, Поз, 1)); Если (ТекКод > 100 // до 100 разные знаки типа % - " и т.д. И ТекКод < 1040 // 1040 код символа А И НЕ ТекКод = 1025) // 1025 код символа Ё (вне диапазона заглавных букв А-Я 1040-1071) ИЛИ ТекКод >1071// 1071 код символа Я Тогда Возврат Истина; КонецЕсли; КонецЦикла; Возврат Ложь; КонецФункции
Denis211990; + 1 – Ответить
7. user1863362 30.11.22 12:46 Сейчас в теме
коды символов всех знаков находятся до 100Вот скажи честно, ты таблицу ASCII вообще видел? Скобки там разные квадратные, фигурные, не? Битые символы, да?
9. cargobird 305 30.11.22 13:02 Сейчас в теме
(7) до 126 нижний диапазон расширить надо.
Спасибо за подсказку!
8. ImHunter 299 30.11.22 12:48 Сейчас в теме
(1) Определял для XML. Может подойдет .
Denis211990; + 1 – Ответить
10. triviumfan 88 28.01.23 23:40 Сейчас в теме
В ERP есть такое:// Возвращает наиболее подходящую кодировку текста, полученную путем сравнения с алфавитом. // // Параметры: // ДанныеТекста — ДвоичныеДанные — двоичные данные файла. // // Возвращаемое значение: // Строка — кодировка файла. // Функция КодировкаИзСоответствияАлфавиту(ДанныеТекста) Кодировки = РаботаСФайламиСлужебный.Кодировки(); Кодировки.Удалить(Кодировки.НайтиПоЗначению(«utf-8_WithoutBOM»)); КодировкаKOI8R = Кодировки.НайтиПоЗначению(«koi8-r»); Кодировки.Сдвинуть(КодировкаKOI8R, -Кодировки.Индекс(КодировкаKOI8R)); КодировкаWin1251 = Кодировки.НайтиПоЗначению(«windows-1251»); Кодировки.Сдвинуть(КодировкаWin1251, -Кодировки.Индекс(КодировкаWin1251)); КодировкаUTF8 = Кодировки.НайтиПоЗначению(«utf-8»); Кодировки.Сдвинуть(КодировкаUTF8, -Кодировки.Индекс(КодировкаUTF8)); СоответствующаяКодировка = «»; МаксимальноеСоответствиеКодировки = 0; Для Каждого Кодировка Из Кодировки Цикл СоответствиеКодировки = ПроцентСоответствияАлфавиту(ДанныеТекста, Кодировка.Значение); Если СоответствиеКодировки > 0.95 Тогда Возврат Кодировка.Значение; КонецЕсли; Если СоответствиеКодировки > МаксимальноеСоответствиеКодировки Тогда СоответствующаяКодировка = Кодировка.Значение; МаксимальноеСоответствиеКодировки = СоответствиеКодировки; КонецЕсли; КонецЦикла; Возврат СоответствующаяКодировка; КонецФункции Функция ПроцентСоответствияАлфавиту(ДвоичныеДанные, ПроверяемаяКодировка) // АПК:1036-выкл, АПК:163-выкл — алфавит не требует проверки орфографии. Алфавит + «AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz» + «1234567890 «; // АПК:1036-вкл, АПК:163-вкл ПотокАлфавита = Новый ПотокВПамяти(); ЗаписьАлфавита = Новый ЗаписьДанных(ПотокАлфавита); ЗаписьАлфавита.ЗаписатьСтроку(Алфавит, ПроверяемаяКодировка); ЗаписьАлфавита.Закрыть(); ДанныеАлфавита = ПотокАлфавита.ЗакрытьИПолучитьДвоичныеДанные(); ЧтениеДанныхАлфавита = Новый ЧтениеДанных(ДанныеАлфавита); БуферАлфавитаВКодировке = ЧтениеДанныхАлфавита.ПрочитатьВБуферДвоичныхДанных(); Индекс = 0; СимволыАлфавита = Новый Массив; Пока Индекс Показать
Denis211990; + 1 – Ответить
12. ybatiaev 58 27.03.23 19:13 Сейчас в теме
КодировкаИзСоответствияАлфавитутак понял, что данной функции надо скармливать файлы с только определёнными именами. По крайней мере в Бух30 так сейчас (
14. triviumfan 88 27.03.23 21:49 Сейчас в теме
(12) Параметр «ДанныеТекста» — двоичные данные. Где там хотя бы слово про формат файла?)
Анализируется сам текст.15. ybatiaev 58 27.03.23 22:10 Сейчас в теме
(14)
(14) Это я воспользовался стандартной РегистрыСведенийКодирвкиФайлов.ОпределитьКодирвкиФайлов(ПрисоединенныйФайл, Расширение)
Ошибку выдавала 1С не про формат, а про имена файлов. Типа ожидаю вот такие, а мне подсунуто «Тест.txt»16. user1826630 27.03.23 22:38 Сейчас в теме
Типа ожидаю вот такие, а мне подсунуто «Тест.txt»
Точно! Кодировка текста определяется расширением файла!
17. ybatiaev 58 27.03.23 22:40 Сейчас в теме(16) расширение задаётся параметром, что не так? И не надо смеяться. Сделал в итоге по Вашему. Стандартную сразу не использую
(16)18. user1826630 27.03.23 22:52 Сейчас в теме
Сделал в итоге по Вашему.
Я разве предлагал свое решение? Покажите мне его.
расширение задаётся параметром, что не так?
А проблема разве в расширении? Проблема в определении кодировки.
19. ybatiaev 58 27.03.23 23:41 Сейчас в теме
А проблема разве в расширении? Проблема в определении кодировки.Так и пытаюсь это решить же. Если операционка определяет это чётко, значит как бы можно используя WMI это сделать. Пока не нашёл правильного решения
20. triviumfan 88 28.03.23 14:57 Сейчас в теме
(19) Ничего не понял, причём тут WMI.
Понял, что вы пытались использовать типовую функцию, неверно передав в неё параметр «расширение», хотя оно нужно лишь для частного случая определения кодировки из xml файла по заголовку:)
Вообще я сомневаюсь, что это «определение по алфавиту» работает, я просто нашёл её в одном из решении, проверил работу и всё)21. ybatiaev 58 28.03.23 15:03 Сейчас в теме
Ничего не понял, причём тут WMIЭто я написал, что ВОЗМОЖНО есть механизмы операционки для определения кодировки. Они 100% есть, т.к. открываешь файл в Виндах — кодировка сразу прописана в строке состояния. У нас. на некоторых серверах не прописана. Т.е. задана системная и, скорее всего, других не используется вообще. Спросил только потому, что может кто-то сталкивался.
Предварительно решил как предложил cargobird(6). Пользователи работают.Узнать кодировку файла
Есть файл не понятно в какой кодировке, нужно определить кодировку, написал вот такой вариант, но уверен что есть способ определения кодировки на много проще, подскажите.
# какой то файл скачанный с интернета в неизвестной кодировке. open('test.txt', 'w', encoding='cp500').write('Hello\n') # сюда можно впихнуть все известные кодировки. encoding = [ 'utf-8', 'cp500', 'utf-16', 'GBK', 'windows-1251', 'ASCII', 'US-ASCII', 'Big5' ] correct_encoding = '' for enc in encoding: try: open('test.txt', encoding=enc).read() except (UnicodeDecodeError, LookupError): pass else: correct_encoding = enc print('Done!') break print(correct_encoding)Отслеживать
задан 1 авг 2017 в 15:17
Игорь Игоряныч Игорь Игоряныч
1,903 4 4 золотых знака 15 15 серебряных знаков 27 27 бронзовых знаков2 ответа 2
Сортировка: Сброс на вариант по умолчанию
from chardet.universaldetector import UniversalDetector detector = UniversalDetector() with open('test.txt', 'rb') as fh: for line in fh: detector.feed(line) if detector.done: break detector.close() print(detector.result)Отслеживать
ответ дан 1 авг 2017 в 16:27
Sergey Gornostaev Sergey Gornostaev
66.5k 6 6 золотых знаков 53 53 серебряных знака 112 112 бронзовых знаковЕще мудренее чем у меня, и не все кодировки распознает, да еще и левый модуль нужно устанавливать, я так понял проще способа нет.
1 авг 2017 в 17:14
Проще способа нет. Но chardet в этой области признанный стандарт, используемый чуть ли не каждым вторым модулем из PyPI.
1 авг 2017 в 17:17
@ИгорьИгоряныч: способ в вопросе явно неверный: отсутствие исключения не говорит, что «правильную кодировку» нашли — вы таким образом кракозябры можете получить. В общем случае, не существует метода определения «правильной» кодировки. Но отдельные кодировки могут быть более вероятными нежели другие. chardet именно этим и занимается: гадает какие кодировки наибольшие шансы имеют.
Что делать, если в текстовом файле неверная кодировка (каракули)?
Рассмотрим в данной инструкции, что делать, если Вы открыли или загружаете файл, а там «каракули»?
Файл с неверной кодировкой выглядит примерно так (рис.1):

Рисунок 1.
Причина этому неверная кодировка, поэтому кодировку файла надо изменить. Для этого нам понадобится перейти на сайт Notepad++ и скачать последнюю актуальную версию программы. На текущий момент актуальная версия 8.1.4, скачиваем программу и устанавливаем (рис.2).

Рисунок 2.
Далее кликом правой клавиши мыши откройте Ваш файл через Notepad++ и через меню «Кодировки»- «Преобразовать в UTF-8» или «Encoding» -«Convert to UTF-8» преобразуйте кодировку файла, далее сохраните файл (рис. 3.).

«Преобразовать в UTF-8″ исправляем кодировку файла» />
Рисунок 3.Готово. Мы рассмотрели, что делать, если Ваш файл имеет неверную кодировку.
Другие статьи по теме
- Договор и документы
- Дополнительные сервисы
- Можно ли выкупить магазин в облаке/купить лицензию для магазина в облаке?
- На каком языке программирования реализован магазин?
- Через какое время сайт появится в поисковых системах?