Помогите Пожалуйста с кодировками

Russian main discussion
  • Author
  • Message
Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

VladSh
Формат символа новой строки. Меняется через "Главное меню->Правка->Формат новой строки", либо двойным кликом по этому месту в строке статуса.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

VladSh wrote:А что тогда означает надпись Unix чуть левее?
http://ru.wikipedia.org/wiki/CR_LF, управляющие символы
CR LF – \r\n – Windows
LF – \n – Unix
CR – \r – Mac

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher, я как раз не знал, что такое "Формат символа новой строки", я думал это "ANSI" и т.п., а это оказалось формат управляющих символов.
Спасибо за доки, - это то, что нужно! 8)

Offline
Posts: 15
Joined: Thu Nov 13, 2008 10:35 am

Post by Крепыш »

Пишу скрипт JScript для обработки текстовых файлов. В основном они в кодировке ANSI, но иногда попадаются и в UNICODE. Для проверки на UNICODE использую такую онструкцию:

Code: Select all

var FileIn = objFileIn.OpenAsTextStream(1);                                  //Открываем 1-й файл, по умолчанию он открывается в ANSI
var Text = FileIn.ReadLine();                                                     //Читаем первую строку
                                                                                  //Проверяем первые два байта
if ((Symbol = Text.substr(0, 2)) != '\u044f\u044e' && Symbol != '\u044e\u044f')   //Считаем, что кодировка ANSI
  var FileOut = FSO.CreateTextFile(FileNameOut)                                   //Создаём новый файл (по умолчанию в ANSI)
else                                                                              //Иначе, считаем, что кодировка UNICODE
{
  FileIn.Close();                                                                 //Закрываем 1-й файл
  FileIn = objFileIn.OpenAsTextStream(1, -1);                                     //И открываем в UNICODE
  var FileOut = FSO.CreateTextFile(FileNameOut, true, true);                      //Создаём 2-й файл в UNICODE
         Text = FileIn.ReadLine()
}
Поправьте, пожалуйста, если что не так. Меня интересует правильность проверки на UNICODE:

Code: Select all

if ((Symbol = Text.substr(0, 2)) != '\u044f\u044e' && Symbol != '\u044e\u044f')
Также иногда попадаются нетекстовые файлы. Как проверить их на бинарность, чтобы исключить из обработки?

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Крепыш
то, что ты проверяешь - это BOM, которого вполне может и не быть. В общем случае юникодный файл можно определить по допустимым значениям (не все байты могут быть частью юникодного символа, см. вики). Если юникодный файл содержит только текст латиницей, тогда каждый четный (или нечетный, в зависимости от Big/Little endian) байт будет нулевым.
Бинарность определяется по наличию нетекстовых символов, но тоже лишь с долей вероятности.

Апд. Если в файле точно наличествует перевод строки, можно привязаться к нему: он будет 0xD в анси и 0x0 0xD в юникоде. Если же переводы строки только в формате виндов (0xD 0xA), то надёжность определения ещё больше повышается.

Offline
Posts: 5
Joined: Tue Jul 29, 2008 7:24 am

проблема - с кодировками.

Post by Genn »

И еще одна проблема - с кодировками.
Во-первых с автораспознаванием кодировок.
По сути так и не решена. Например в блокноте открываешь файл с юникодами, и он всегда нормально их отображает. Акель же вместо них часто пишет что-то совсем иное.
И кроме того не хватает возможности переключать ввод в нужную кодировку.
К примеру создаю файл и хочу писать в нем юникодовые символы, но ничего не выходит. :( Не помогает и установка "кодировка по умолчанию".
Явно не хватает непосредственной возможности переключения, как встречал у некоторых редакторов.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Genn
Выбираем Unicode шрифт, например, "Courier New".

Offline
Posts: 5
Joined: Tue Jul 29, 2008 7:24 am

Post by Genn »

Instructor
Действительно, так получается. Причем обнаружил странную вещь, из-за которой пришлось дополнительно глянуть некоторые шрифты в редакторе шрифтов. Так например из двух одинаковых на первый взгляд, шрифт Tahoma оказался содержащим намного больше , а возможно и все кодовые страницы, шрифт же Verdana, хотя и содержащим несколько кодовых страниц, но явно намного меньше, т.е. в большинстве случаев не юникодовским.
Но тем не менее, остался пока что один непонятный момент.
Если создавать в блокноте файл и сохранять "как юникод", AkelPad с ним работает нормально.
Если же в блокноте сохранить "как UTF-8", AkelPad не может его прочесть, причем указывает в строке статуса в качестве страницы почему-то Win и UTF-16(?).
Аналогично не читает нормально кириллицу в xml-файлах, созданных в UTF-8, определяя кодовую страницу Unix и 1251.
Блокнот же эти файлы распознает вполне нормально.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Genn
Ознакамливаемся с FAQ, если проблему не решается, то называем версию AkelPad'а и скидываем файл на почту, который AkelPad не корректно открывает.
Post Reply