Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

FileSystemObject OpenTextFile не может читать UTF8 (K.Wiolowan)
Author Message
K.Wiolowan
Участник форума



Joined: 22 Feb 2006
Posts: 53
Карма: 11
   поощрить/наказать


PostPosted: Tue Nov 28, 2006 10:35 am (написано за 8 минут 12 секунд)
   Post subject: FileSystemObject OpenTextFile не может читать UTF8
Reply with quote

метод объекта FileSystemObject, OpenTextFile(), может открывать файлы в формате Unicode (UTF-16) и ASCII (+локализация по умолчанию, напр. cp1251).
Чтобы считать UTF-8 файл в режиме ASCII мне приходится исправлять неправильную конвертацию "кириллицы", проводить глобальные замены типа
Code (JavaScript): скопировать код в буфер обмена
utf8string = utf8string.replace(rePseudoCyr, function($0){
        return UTF8Cyr2Uni($0)
}

var rePseudoCyr = /[\u0410-\u042F].|[\u0430-\u043F]..|[\u0440-\u044F].../g

function UTF8Cyr2Uni(str){
        switch (str.length){
        case 3:
                return (String.fromCharCode(
                ((str.charCodeAt()-848-0xE0)<<12)+
                (cyr2ascii[str.charCodeAt(1)]-0x80)*64+
                cyr2ascii[str.charCodeAt(2)]-0x80 ))
                break
        case 2:
                return( String.fromCharCode(
                ((str.charCodeAt()-848-0xC0)<<6)+
                cyr2ascii[str.charCodeAt(1)]-0x80 ))
                break
        case 4:
                var code=((str.charCodeAt()-848-0xF0)<<18)+
                ((cyr2ascii[str.charCodeAt(1)]-0x80)<<12)+
                (cyr2ascii[str.charCodeAt(2)]-0x80)*64+
                cyr2ascii[str.charCodeAt(3)]-0x80
                return String.fromCharCode(code & 0xFFFF)+String.fromCharCode(code & 0xFFFF0000)
                break
        }
}
       
ascii2cyr=[]
for(i=0; i<128; i++) ascii2cyr[i]=i
ascii2cyr=ascii2cyr.concat([1026, 1027, 8218, 1107, 8222, 8230, 8224, 8225, 8364, 8240, 1033, 8249, 1034, 1036, 1035, 1039, 1106, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 8482, 1113, 8250, 1114, 1116, 1115, 1119, 160, 1038, 1118, 1032, 164, 1168, 166, 167, 1025, 169, 1028, 171, 172, 173, 174, 1031, 176, 177, 1030, 1110, 1169, 181, 182, 183, 1105, 8470, 1108, 187, 1112, 1029, 1109, 1111])
for(i=192; i<256; i++) ascii2cyr[i]=i+848
cyr2ascii=[]
for(i=0; i<256; i++) cyr2ascii[ascii2cyr[i]]=i
Есть ли более простой и универсальный (не зависящий от system codepage) способ считывать UTF-8 файлы с помощью JScript, возможно, используя другие распространенные ActiveXObject's?

Last edited by K.Wiolowan on Tue Nov 28, 2006 10:48 am; edited 1 time in total
Back to top
View user's profile Send private message
K.Wiolowan
Участник форума



Joined: 22 Feb 2006
Posts: 53
Карма: 11
   поощрить/наказать


PostPosted: Tue Nov 28, 2006 10:44 am (спустя 8 минут; написано за 9 минут 44 секунды)
   Post subject: Re: FileSystemObject OpenTextFile не может читать UTF8
Reply with quote

&nbsp;

Last edited by K.Wiolowan on Tue Nov 28, 2006 10:49 am; edited 1 time in total
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Tue Nov 28, 2006 10:44 am (спустя 33 секунды; написано за 54 секунды)
   Post subject:
Reply with quote

wdh.suncloud.ru/js14.htm#hopentextfile wrote:
Метод OpenTextFile
Синтаксис: fso.OpenTextFile(имя [[[, режим]?, флаг]?, формат]?)

...

Необязательный аргумент формат задает кодировку символов файла и может принимать следующие значения:
 0 Открыть файл в кодировке ANSI. Принято по умолчанию.
-1 Открыть файл в кодировке Unicode.
-2 Открыть файл в кодировке операционной системы.
Back to top
View user's profile Send private message
K.Wiolowan
Участник форума



Joined: 22 Feb 2006
Posts: 53
Карма: 11
   поощрить/наказать


PostPosted: Tue Nov 28, 2006 11:16 am (спустя 31 минуту; написано за 3 минуты 38 секунд)
   Post subject:
Reply with quote

Rumata wrote:
wdh.suncloud.ru/js14.htm#hopentextfile wrote:
Метод OpenTextFile
Синтаксис: fso.OpenTextFile(имя [[[, режим]?, флаг]?, формат]?)

...

Необязательный аргумент формат задает кодировку символов файла и может принимать следующие значения:
 0 Открыть файл в кодировке ANSI. Принято по умолчанию.
-1 Открыть файл в кодировке Unicode.
-2 Открыть файл в кодировке операционной системы.
--Это все хорошо, но вот я сохраняю в формате UTF-8 строку "water абракадабра 한국 韓國" (в конце стоят два символа на корейском, и два - на китайском"
и далее считываю ее:
1) в формате "0": "п»їwater абракадабра н•њкµ­ йџ“ењ‹"
2) в формате "-2": "п»їwater абракадабра н•њкµ­ йџ“ењ‹"
3) в формате "-1": "믯瞿瑡牥퀠킰톱킀킰킺킰킴킰톱킀₰闭궵鎟鳥"

после того, как я считал файл в формате 0/-1, и совершил над полученной строкой описанное выше действо, получаю:
"water абракадабра 한국 韓國"
Back to top
View user's profile Send private message
K.Wiolowan
Участник форума



Joined: 22 Feb 2006
Posts: 53
Карма: 11
   поощрить/наказать


PostPosted: Tue Nov 28, 2006 11:24 am (спустя 7 минут; написано за 2 минуты 59 секунд)
   Post subject:
Reply with quote

Проблема еще и в том, что, похоже, дядя Билл не различает "ANSI" и "system default". --конвертирует и то и то в кириллицу. Очевидно, думая, что русские иначе как по-русски писать и читать не могут.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML