VladSh
Формат символа новой строки. Меняется через "Главное меню->Правка->Формат новой строки", либо двойным кликом по этому месту в строке статуса.
Помогите Пожалуйста с кодировками
- Author
- Message
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
http://ru.wikipedia.org/wiki/CR_LF, управляющие символыVladSh wrote:А что тогда означает надпись Unix чуть левее?
CR LF – \r\n – Windows
LF – \n – Unix
CR – \r – Mac
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
-
Offline
- Posts: 15
- Joined: Thu Nov 13, 2008 10:35 am
Пишу скрипт JScript для обработки текстовых файлов. В основном они в кодировке ANSI, но иногда попадаются и в UNICODE. Для проверки на 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()
}
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
Крепыш
то, что ты проверяешь - это BOM, которого вполне может и не быть. В общем случае юникодный файл можно определить по допустимым значениям (не все байты могут быть частью юникодного символа, см. вики). Если юникодный файл содержит только текст латиницей, тогда каждый четный (или нечетный, в зависимости от Big/Little endian) байт будет нулевым.
Бинарность определяется по наличию нетекстовых символов, но тоже лишь с долей вероятности.
Апд. Если в файле точно наличествует перевод строки, можно привязаться к нему: он будет 0xD в анси и 0x0 0xD в юникоде. Если же переводы строки только в формате виндов (0xD 0xA), то надёжность определения ещё больше повышается.
то, что ты проверяешь - это BOM, которого вполне может и не быть. В общем случае юникодный файл можно определить по допустимым значениям (не все байты могут быть частью юникодного символа, см. вики). Если юникодный файл содержит только текст латиницей, тогда каждый четный (или нечетный, в зависимости от Big/Little endian) байт будет нулевым.
Бинарность определяется по наличию нетекстовых символов, но тоже лишь с долей вероятности.
Апд. Если в файле точно наличествует перевод строки, можно привязаться к нему: он будет 0xD в анси и 0x0 0xD в юникоде. Если же переводы строки только в формате виндов (0xD 0xA), то надёжность определения ещё больше повышается.
-
Offline
- Posts: 5
- Joined: Tue Jul 29, 2008 7:24 am
проблема - с кодировками.
И еще одна проблема - с кодировками.
Во-первых с автораспознаванием кодировок.
По сути так и не решена. Например в блокноте открываешь файл с юникодами, и он всегда нормально их отображает. Акель же вместо них часто пишет что-то совсем иное.
И кроме того не хватает возможности переключать ввод в нужную кодировку.
К примеру создаю файл и хочу писать в нем юникодовые символы, но ничего не выходит. Не помогает и установка "кодировка по умолчанию".
Явно не хватает непосредственной возможности переключения, как встречал у некоторых редакторов.
Во-первых с автораспознаванием кодировок.
По сути так и не решена. Например в блокноте открываешь файл с юникодами, и он всегда нормально их отображает. Акель же вместо них часто пишет что-то совсем иное.
И кроме того не хватает возможности переключать ввод в нужную кодировку.
К примеру создаю файл и хочу писать в нем юникодовые символы, но ничего не выходит. Не помогает и установка "кодировка по умолчанию".
Явно не хватает непосредственной возможности переключения, как встречал у некоторых редакторов.
-
Offline
- Posts: 5
- Joined: Tue Jul 29, 2008 7:24 am
Instructor
Действительно, так получается. Причем обнаружил странную вещь, из-за которой пришлось дополнительно глянуть некоторые шрифты в редакторе шрифтов. Так например из двух одинаковых на первый взгляд, шрифт Tahoma оказался содержащим намного больше , а возможно и все кодовые страницы, шрифт же Verdana, хотя и содержащим несколько кодовых страниц, но явно намного меньше, т.е. в большинстве случаев не юникодовским.
Но тем не менее, остался пока что один непонятный момент.
Если создавать в блокноте файл и сохранять "как юникод", AkelPad с ним работает нормально.
Если же в блокноте сохранить "как UTF-8", AkelPad не может его прочесть, причем указывает в строке статуса в качестве страницы почему-то Win и UTF-16(?).
Аналогично не читает нормально кириллицу в xml-файлах, созданных в UTF-8, определяя кодовую страницу Unix и 1251.
Блокнот же эти файлы распознает вполне нормально.
Действительно, так получается. Причем обнаружил странную вещь, из-за которой пришлось дополнительно глянуть некоторые шрифты в редакторе шрифтов. Так например из двух одинаковых на первый взгляд, шрифт Tahoma оказался содержащим намного больше , а возможно и все кодовые страницы, шрифт же Verdana, хотя и содержащим несколько кодовых страниц, но явно намного меньше, т.е. в большинстве случаев не юникодовским.
Но тем не менее, остался пока что один непонятный момент.
Если создавать в блокноте файл и сохранять "как юникод", AkelPad с ним работает нормально.
Если же в блокноте сохранить "как UTF-8", AkelPad не может его прочесть, причем указывает в строке статуса в качестве страницы почему-то Win и UTF-16(?).
Аналогично не читает нормально кириллицу в xml-файлах, созданных в UTF-8, определяя кодовую страницу Unix и 1251.
Блокнот же эти файлы распознает вполне нормально.