Страница 1 из 1

Считать правильно кириллицу из REG_BINARY

Добавлено: 04 июн 2009, 16:57
OracleLover
Всем доброго дня, не могу найти(и сам сделать тоже не домозгую) алгоритм правильного преобразования кириллического символа в нужную кодировку.

То бишь если у меня есть C:\WORK\Аня\diplomka_1, то после считывания данной строки через
Reg.ReadBinaryData( 'Dip', BinData, SizeOf(BinData) );

я получу
C:\WORK\.=О\diplomka_1

в самом ключе так же этот параметр выглядит естественно и надо смотреть на байты данных символов
.=О это 10 3D 4F

Но вот как распознать это дело мне не дано, спасибо за помощь.

Re: Считать правильно кириллицу из REG_BINARY

Добавлено: 04 июн 2009, 17:07
Naeel Maqsudov
Надо просто правильно записывать.
Покажите лучше как записывается это значение.
А также для подобных значений не следует использовать REG_BINARY. Нужно REG_SZ или REG_MULTI_SZ

Re: Считать правильно кириллицу из REG_BINARY

Добавлено: 04 июн 2009, 17:20
OracleLover
Naeel Maqsudov писал(а):Надо просто правильно записывать.
Покажите лучше как записывается это значение.
А также для подобных значений не следует использовать REG_BINARY. Нужно REG_SZ или REG_MULTI_SZ
Для подоных вещей правильно вообще будет писать в стрковый параметр :) )

А пишут студенты ручками, ну или особо продвинутые с помощью своих инсталляторов.

Re: Считать правильно кириллицу из REG_BINARY

Добавлено: 04 июн 2009, 17:27
Naeel Maqsudov
Ну 10 3D 4F - это никак не кириллица ни в cp866, ни в KOI8, ни в Win1251.

Re: Считать правильно кириллицу из REG_BINARY

Добавлено: 04 июн 2009, 18:26
OracleLover
Naeel Maqsudov писал(а):Ну 10 3D 4F - это никак не кириллица ни в cp866, ни в KOI8, ни в Win1251.
Я понимаю, но не смог подобрать правильного определения - а назвал кириллицей потому что когда вот это пишешь в параметре REG_BINARY например слово Аня(по-русски естественно) то вместо этого слова появляется .=О что соотвествует вышеназванным байтам, отображающиеся слева.

Как мне в итоге после считывания из строки .=О получить Аня?

Re: Считать правильно кириллицу из REG_BINARY

Добавлено: 24 сен 2009, 18:04
Dr_Grizzly
Не знаю подойдет ли, попробуй это:

function DosToWin(St: string): string;
var
Ch: PChar;
begin
Ch := StrAlloc(Length(St) + 1);
OemToAnsi(PChar(St), Ch);
Result := Ch;
StrDispose(Ch)
end;