2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3, 4  След.
 
 Почему портится текстовый файл?
Сообщение07.09.2013, 19:58 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Что-то происходит с кодировкой в текстовом файле, уже замучилась его исправлять.

Вместо нормального текста:

Код:
11 13 17 23 31 37 43 53 61 67 71 83 97 101 103 113 127 131 137 283 281 277 271 263 257 251 241 233 227 223 211 197 193 191 181 167 163 157

в файле появляется такая абракадабра:

Код:
ㄱㄠ″㜱㈠″ㄳ㌠‷㌴㔠″ㄶ㘠‷ㄷ㠠″㜹ㄠ㄰ㄠ㌰ㄠ㌱ㄠ㜲ㄠㄳㄠ㜳㈠㌸㈠ㄸ㈠㜷㈠ㄷ㈠㌶㈠㜵㈠ㄵ㈠ㄴ㈠㌳㈠㜲㈠㌲㈠ㄱㄠ㜹ㄠ㌹ㄠㄹㄠㄸㄠ㜶ㄠ㌶ㄠ㜵

Открываю файл с помощью WordPad, всё нормально читается.

У меня сначала испортился файл A13.txt, я его удалила и перенесла текст в файл A16.txt.
Запустила программу и сижу жду, программа ничего не выводит (а в этом файле исходные данные для программы). Посмотрела файл, он опять испортился.
Главное, файлов входных у меня 4 штуки, а портится только один. Данные во всех 4-х файлах совершенно одинакового формата.

И раньше такое было, потом пропало, теперь вот опять возникло.

Чем это объяснить и как с этим бороться?

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение07.09.2013, 20:49 
Заслуженный участник


27/04/09
28128
Он начинается символом 1, перед этим ничего нет? Вы создавали его вручную и каким редактором или программой и каким кодом? А смотрели его перед порчей вы в каком редакторе?

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение07.09.2013, 22:23 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Да, создавала его вручную; просто открыла его в Блокноте, удалила старые данные и записала новые.
До порчи смотрела файл в Блокноте, всё было хорошо.

А что, данные в текстовом файле не могут начинаться с единицы? А с любой другой цифры могут? Другие файлы с данными у меня начинаются тоже сразу (нет пробела перед первой цифрой), но они не портятся. Я их точно так же создавала вручную.

-- Сб сен 07, 2013 23:35:47 --

После переноса данных в файл A17.txt программа работала, файл пока не испортился.

Изображение

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение07.09.2013, 23:11 
Заслуженный участник


27/04/09
28128
С цифр как раз могут. Последовательность первых байтов файла, представляющая символ с шестнадцатеричным кодом FEFF (Byte order mark), определяет, в какой кодировке будет прочитан файл. Блокнот Windows использует четыре варианта: FE FF и FF FE для кодировки UTF-16, EF BB BF для UTF-8 и пустую последовательность (если файл начинается с других байтов) для восьмибитной кодировки, на русской системе — Windows-1521. По умолчанию, не найдя во введённом тексте символов, непредставимых в последней, Блокнот пишет всё как есть в ней, не проверяя, что начальные символы могут образовать собой BOM от другой кодировки. И если так есть — при следующем открытии он прочитает файл уже в ней.

BOM’ы от вышеуказанных кодировок в Windows-1251 выглядят как юя, яю и п»ї. Такие последовательности (из-за обилия иероглифов в примере — скорее всего, какая-то из двух первых) должны были в вашем явлении когда-то появляться в начале файла. Для другого объяснения пока нет данных.

-- Вс сен 08, 2013 02:14:13 --

Как в вашем случае такое получилось, всё же не пойму. Цифры, откуда ни копируй, такого эффекта не дают. Может, кто-то поймёт механизм.

-- Вс сен 08, 2013 02:16:57 --

Если файл снова испортится, или у вас есть копия испорченного, откройте его в шестнадцатеричном редакторе и скопируйте в эту тему начальный десяток байт? Интересно глянуть.

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение07.09.2013, 23:21 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Удивляет то, что эффект этот не постоянен: то появится, то сам собой пропадёт.
Как уже сказала, файл А17.txt не портится пока, программа нормально работает, хотя я ничего не предпринимала по устранению этого эффекта.

У меня почти всегда текстовые файлы с исходными данными начинаются с цифры, перед которой ничего нет. Когда такие файлы создаёт программа, она записывает перед первой цифрой пробел.

-- Вс сен 08, 2013 00:23:13 --

arseniiv в сообщении #761487 писал(а):
...копия испорченного, откройте его в шестнадцатеричном редакторе и скопируйте в эту тему начальный десяток байт? Интересно глянуть.

Это как? :?
Копия испорченнго файла есть в корзине, могу взять.

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение07.09.2013, 23:28 
Заслуженный участник


27/04/09
28128
Это было бы неплохо! Если можете, выложите этот файл куда-нибудь целиком.

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение07.09.2013, 23:35 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
Сейчас выложу на Яндекс.Диск.

Вот очень кстати вопросик :D
На форуме ПЕН как-то зашёл разговор о прикреплении файлов прямо на форуме. Один форумчанин там написал, что на dS есть возможность прикреплять файлы прямо на форуме. Это так? Я за 5 лет пребывания на форуме так и не узнала, как это делать. Сейчас бы и воспользовалась этой возможностью, файлик-то у меня крохотный.

Ну, пошла отправлять его на Яндекс.Диск.

-- Вс сен 08, 2013 00:40:59 --

Файл загрузила, скачать здесь:
http://yadi.sk/d/yIoGR1H38ssNP

Опа, а на Яндекс.Диске файл нормальный получился (при просмотре я вижу его нормальным) :-)
А у меня он такой:

Код:
ㄱㄠ″㜱㈠″ㄳ㌠‷㌴㔠″ㄶ㘠‷ㄷ㠠″㜹ㄠ㄰ㄠ㌰ㄠ㌱ㄠ㜲ㄠㄳㄠ㜳㈠㌸㈠ㄸ㈠㜷㈠ㄷ㈠㌶㈠㜵㈠ㄵ㈠ㄴ㈠㌳㈠㜲㈠㌲㈠ㄱㄠ㜹ㄠ㌹ㄠㄹㄠㄸㄠ㜶ㄠ㌶ㄠ㜵

При загрузке файл перекодировался.

-- Вс сен 08, 2013 00:44:49 --

Изображение

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение08.09.2013, 00:01 
Заслуженный участник


27/04/09
28128
Посмотрел. Файл начинается прямо с цифр, первые байты:
Код:
31 31 20 31 33 20 31 37 20…
Мой Блокнот открывает этот файл как UTF-16 LE с иероглифами. Непонятно почему. Другой редактор открывает нормально.

-- Вс сен 08, 2013 03:12:50 --

Nataly-Mak в сообщении #761494 писал(а):
На форуме ПЕН как-то зашёл разговор о прикреплении файлов прямо на форуме. Один форумчанин там написал, что на dS есть возможность прикреплять файлы прямо на форуме. Это так? Я за 5 лет пребывания на форуме так и не узнала, как это делать. Сейчас бы и воспользовалась этой возможностью, файлик-то у меня крохотный.
Где-то была уже тема про это, не нашёл. Когда пишете сообщение не в «быстром ответе», а в полном, где-то под формой ответа есть поле с кнопочкой для приложения файлов: http://s12.postimg.org/pdkd9v865/Screenshot_235.png.

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение08.09.2013, 00:49 
Заслуженный участник


28/04/09
1933
Причина в неадекватном поведении WinAPI-шной функции IsTextUnicode, которая используется Блокнотом для автоматического определения кодировки в файлах без BOM. Этот баг даже имеет собственное название $\text{---}$ "Bush hid the facts".
В данном случае вот такая строка еще распознается правильно
Код:
11 13 17 23 31 37 43 53 61 67 71 83 97 101 103 113 127 131 137 283 281 277 271 263 257 251 241 233 227 223 211 197 193 191 181
а вот такая $\text{---}$ уже нет:
Код:
11 13 17 23 31 37 43 53 61 67 71 83 97 101 103 113 127 131 137 283 281 277 271 263 257 251 241 233 227 223 211 197 193 191 181 1
Можно порекомендовать воспользоваться другим текстовым редактором, не страдающим от таких проблем (хотя бы тем же Wordpad).

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение08.09.2013, 01:06 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Вот же прикол. Чего только на свете не бывает. Я правильно понял, что этот глюк волнует лишь пользователей ХРюшки, а тем, кто использует Висту, семёрку и восьмёрку, волноваться не о чем?

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение08.09.2013, 01:31 
Заслуженный участник


28/04/09
1933
У меня в Windows 7 строка "bush hid the facts" и прочие из статьи в Википедии распознаются правильно, но на файле Nataly-Mak баг по-прежнему всплывает. Так что волноваться стоит.
Но тут самая мякотка не в этом. Обычно, когда в текстовый редактор встроена функция автоопределения кодировки текста, то обязательно в интерфейсе есть возможность принудительного выставления нужной кодировки пользователем. Но Блокнот $\text{---}$ редактор настолько простой, что автоопределение в нем есть, а о возможности его отключения пользователем гениальные программисты из Microsoft не позаботились. И никому за 19 лет с момента появления проблемы (и за 9 лет с момента ее обнаружения) не пришло в голову все-таки позаботиться об этом. Я уж молчу о том, что саму (не слишком удачную) функцию IsTextUnicode за два десятка лет тоже, по-видимому, не сильно беспокоили улучшениями (хотя используется она отнюдь не только в Блокноте).
P.S. На самом деле баг, конечно, можно обойти, открыв файл через диалоговое окно Блокнота (Файл $\to$ Открыть...) и выбрав в нем из выпадающего списка кодировку ANSI (также доступны для выбора UTF-16 BE и LE и UTF-8). Так что вышеприведенную напраслину вынужден отклонить.

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение08.09.2013, 05:24 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов
arseniiv в сообщении #761497 писал(а):
Посмотрел. Файл начинается прямо с цифр, первые байты:
Код:
31 31 20 31 33 20 31 37 20…
Мой Блокнот открывает этот файл как UTF-16 LE с иероглифами. Непонятно почему. Другой редактор открывает нормально.

Значит, файл не перекодировался, а просто при просмотре на Яндекс.Диске он открывается нормально, как, например, и у меня открывается нормально в WordPad.

Цитата:
Где-то была уже тема про это, не нашёл. Когда пишете сообщение не в «быстром ответе», а в полном, где-то под формой ответа есть поле с кнопочкой для приложения файлов: http://s12.postimg.org/pdkd9v865/Screenshot_235.png.

Спасибо большое, теперь буду знать.

-- Вс сен 08, 2013 06:27:14 --

Aritaborian в сообщении #761507 писал(а):
Вот же прикол. Чего только на свете не бывает. Я правильно понял, что этот глюк волнует лишь пользователей ХРюшки, а тем, кто использует Висту, семёрку и восьмёрку, волноваться не о чем?

У меня Windows 7 (домашняя базовая, 64-bit).

-- Вс сен 08, 2013 06:38:36 --

EtCetera в сообщении #761509 писал(а):
P.S. На самом деле баг, конечно, можно обойти, открыв файл через диалоговое окно Блокнота (Файл $\to$ Открыть...) и выбрав в нем из выпадающего списка кодировку ANSI (также доступны для выбора UTF-16 BE и LE и UTF-8). Так что вышеприведенную напраслину вынужден отклонить.

Прикрепляю файл, который я получила, проделав указанную процедуру и выбрав кодировку ANSI.
Выглядит это так:

Код:
?????????????????????????????????????????????????????????????????????

Мой компьютер ничего не понял :D

Хм...
а прикрепить-то и не получилось. Я не вижу этого поля у себя ("Добавить вложения"), хотя пользуюсь полным ответом.
Может быть, эта функция не для всех, а только для ЗУ?
На ПЕН, к примеру, есть такие чудачества: некоторые функции доступны не всем, а только членам Клуба.

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение08.09.2013, 11:29 
Заслуженный участник


28/04/09
1933
Nataly-Mak в сообщении #761515 писал(а):
Прикрепляю файл, который я получила, проделав указанную процедуру и выбрав кодировку ANSI.
Выглядит это так:

Код:
?????????????????????????????????????????????????????????????????????

Мой компьютер ничего не понял :D
Это очень странно, потому что у меня Ваш первоначальный файл открывается нормально при выборе ANSI. Правда, у меня Windows 7 Pro 32-bit. А, может быть, это уже как-то связано со шрифтами. Так или иначе, завтра попробую открыть Ваш файлик на машине с 64-битной Windows 7.
Nataly-Mak в сообщении #761515 писал(а):
Хм...
а прикрепить-то и не получилось. Я не вижу этого поля у себя ("Добавить вложения"), хотя пользуюсь полным ответом.
Может быть, эта функция не для всех, а только для ЗУ?
Если не ошибаюсь, именно так.

Кстати, по поводу вот этой особенности:
EtCetera в сообщении #761504 писал(а):
В данном случае вот такая строка еще распознается правильно
Код:
11 13 17 23 31 37 43 53 61 67 71 83 97 101 103 113 127 131 137 283 281 277 271 263 257 251 241 233 227 223 211 197 193 191 181
а вот такая $\text{---}$ уже нет:
Код:
11 13 17 23 31 37 43 53 61 67 71 83 97 101 103 113 127 131 137 283 281 277 271 263 257 251 241 233 227 223 211 197 193 191 181 1
Первая строка длиной 127 символов/байт, вторая $\text{---}$ 128. Т.е. в Microsoft, по-видимому, "избавились" от бага "Bush hid the facts", просто заблокировав автоопределение кодировки для достаточно коротких файлов (длиной менее 128 байт). Можно попытаться подобрать более-менее осмысленную текстовую ANSI-строку, которая и сейчас будет идентифицироваться как Unicode.

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение08.09.2013, 13:53 
Заслуженный участник


11/05/08
32166
EtCetera в сообщении #761563 писал(а):
просто заблокировав автоопределение кодировки для достаточно коротких файлов (длиной менее 128 байт).

Она просто понимает, что 128 делится на 2, а 127 -- нет (раз уж UTF-16). Но вообще это бред какой-то -- автоопределять UTF при отсутствии BOM'а и наличии только ASCII-кодов.

У меня какая-то домашняя 32-х-битная семёрка, и эффект ровно такой же: по умолчанию Блокнот показывает иероглифы, при явном же указании кодировки всё нормально. А вот FAR (который тоже автоопределяет и без BOM'а) такого хулиганства себе, естественно, не позволяет.

 Профиль  
                  
 
 Re: Почему портится текстовый файл?
Сообщение08.09.2013, 14:50 
Заслуженный участник


28/04/09
1933
ewert в сообщении #761613 писал(а):
Она просто понимает, что 128 делится на 2, а 127 -- нет (раз уж UTF-16).
Отчасти Вы правы. Я просто предположил, что если взять достаточно короткую начальную часть исходного файла, то она распознается правильно. Экспериментальным путем выяснилось, что если брать начальный кусок длиной менее 128 символов, то он распознается правильно. При длине 128 и более он распознается правильно, только если число символов нечетно (это, разумеется, очевидно).
ewert в сообщении #761613 писал(а):
Но вообще это бред какой-то -- автоопределять UTF при отсутствии BOM'а и наличии только ASCII-кодов.
Вот тут, по-видимому, сотрудник Microsoft пытается объяснить причины такого хулиганства. На мой взгляд, достаточно неубедительно.
Неплохое решение этой проблемы можно видеть в Word $\text{---}$ там в случае неясностей с кодировкой при открытии файла выпадает диалоговое окно с возможностью ее выбора, причем в специальном поле показывается, как будет выглядеть начало файла в этой кодировке. Примерно так:Изображение

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу 1, 2, 3, 4  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group