1 (изменено: unreal612, 2014-10-06 23:45:58)

Тема: ADODB.Stream и его свойство CharSet

Почитал тут, что возможные значения для CharSet хранятся в разделе реестра HKLM\SOFTWARE\Classes\MIME\Database\Charset.
См. инфу по CharSet us-ascii и us:

AliasForCharset: iso-8859-1

При этом iso-8859-1:

Codepage: 1252
InternetEncoding: 1252

Почему же тогда при чтении c помощью метода ReadText, к примеру, символа с байтом 0x83 при CharSet="iso-8859-1" результатом будем символ U+0192 (т.е. в 10-тичной системе 402), а при CharSet="us-ascii"  или CharSet="us" выводится просто 2 (т.е. берутся только 2 "нижних" 10-тичных цифры)?
Откуда этот ADODB.Stream берет инфу о такой "обрезке" числа для us и us-ascii?

PS.
Кстати, тут где-то для чтения бинарных данных с помощью ADODB.Stream как раз применялись эти кодировки, хотя с какого-то времени они для этого не годятся из-за их равности кодировке win-1252, в которой есть символы выше U+00FF. По крайней мере не годятся без доп. корректировки полученной строки.

win 7 x64, DWX 2.1

2

Re: ADODB.Stream и его свойство CharSet

А на полный исходник кода можно взглянуть, если не секрет ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3 (изменено: unreal612, 2014-10-07 00:11:01)

Re: ADODB.Stream и его свойство CharSet

обычный код

var
    adodbStream = new ActiveXObject('ADODB.Stream'),
    source;

adodbStream.charset = 'us';
// adodbStream.mode = 0;
adodbStream.type = 2;
adodbStream.open();
adodbStream.loadFromFile('test.hex');
adodbStream.position = 0;
source = adodbStream.readText();
adodbStream.close();
WScript.Echo ( source.charCodeAt(0x83) );

test.hex - это набор байтов от 0x00 до 0xff.

Post's attachments

test.hex 256 b, 4 downloads since 2014-10-06 

You don't have the permssions to download the attachments of this post.
win 7 x64, DWX 2.1

4

Re: ADODB.Stream и его свойство CharSet

Видимо, здесь этот Alias из реестра для us и us-ascii не используется. У меня ваш код выводит 3, а не 2. ASCII — 7-битная кодировка, 8-й бит байта игнорируется. 0x83 в двоичном виде будет 10000011, т.е. без верхнего бита 11 = 3.