Конференция "Начинающим" » Как грамотно работать с UnicodeString? [D2005, 2003]
 
  • JohnKorsh (14.02.17 16:14) [0]
    Добрый день! Не подскажет ли кто, как грамотно работать с UnicodeString? Поясню. Мне нужны integer значения, соответствующие символам ASCII таблицы. Если я использую латинский алфавит, то за меня всё преобразует XE10, то есть
    var
    S   : string;
    Work          : integer;
    begin
     S := ‘Test’;
    Work := Ord (S [1]);  // 1
     S := ‘Тест’;
    Work := Ord (S [1]);  // 2
    end;
    В случае 1 Work = $54, то есть, как и требует таблица ASCII для латинского символа T. В случае 2 Work = $0422, вместо ожидаемого по ASCII таблице $92. Как мне получать правильные значения ASCII русских (и других нелатинских) букв при работе с UnicodeString?
  • Rouse_ © (14.02.17 16:34) [1]
    Конвертировать?
  • JohnKorsh (14.02.17 16:35) [2]
    А не подскажете ли как?
  • Rouse_ © (14.02.17 16:41) [3]
    TEncoding
  • Игорь Шевченко © (14.02.17 16:58) [4]

    > Не подскажет ли кто, как грамотно работать с UnicodeString


    В справке все написано.


    > В случае 2 Work = $0422, вместо ожидаемого по ASCII таблице
    > $92


    А с чего бы ожидать ? ASCII - это американский стандарт, про русские буквы он ничего не знает.

    Используй AnsiString вместо Unicode
  • Германн © (15.02.17 02:29) [5]

    > JohnKorsh   (14.02.17 16:14)
    >
    > Как мне получать правильные
    > значения ASCII русских (и других нелатинских) букв при работе
    > с UnicodeString?

    А зачем это тебе нужно? Только не говори что ты хочешь проверять символы на вхождение в некое множество. В Юникодных версиях Дельфи о множествах символов лучше забыть сразу и навсегда.
  • JohnKorsh (15.02.17 12:44) [6]
    Мне нужно для совместимости с ранее написанными программами. В итоге написал декодер - если старший байт от Ord (S[i]) равен $40, то таблично дешифрирую в старую WIn кодировку ASCII.
  • JohnKorsh (15.02.17 12:48) [7]
    Не $40, а $04. Извините, поспешил.
  • Игорь Шевченко © (15.02.17 14:21) [8]

    > В итоге написал декодер - если старший байт от Ord (S[i])
    > равен $40, то таблично дешифрирую в старую WIn кодировку
    > ASCII.


    Кулибин. WideCharToMultibyte
 
Конференция "Начинающим" » Как грамотно работать с UnicodeString? [D2005, 2003]
Есть новые Нет новых   [118607   +37][b:0][p:0]