|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
|||
|
|||
хех, сразу возник вопрос, что делать с элементами которые не имеют DefaultEncoding свойства? -)
хотя, если загруженные тексты будут уже раскодированы правильно, то поидее все будет работать и так -) русификация у меня грузится через TIniFile.. придется видимо от него отказаться ( кодировки он не поддерживает Последний раз редактировалось hilaryon, 17.12.2013 в 19:37. |
#17
|
||||
|
||||
Цитата:
Не стоит путать форумы с богадельнями. © Bargest |
#18
|
|||
|
|||
в общем способ предложенный работает, правда чтобы им воспользоваться надо все файлы подгружаемые прогонять через перекодированный мемо, и даже после этого если пользоваться функцией chr и ord для изменения букв, к примеру для дешифровки сообщений, он не правильной расшифровывает ( пока не понял почему так
реально жаль что нельзя установить в приложении кодировку и чтобы он не брал настройки с винды ( |
#19
|
||||
|
||||
Цитата:
Вот для примера на русскоязычной WinXP установил языковый стандарт "Итальянский (Италия)", расположение "Танзания" и язык ввода по-умолчанию "Английский (США) - (США)". Запускаю такой код: Код:
type _cpinfoExA = record MaxCharSize: UINT; { max length (bytes) of a char } DefaultChar: array[0..MAX_DEFAULTCHAR - 1] of Byte; { default character } LeadByte: array[0..MAX_LEADBYTES - 1] of Byte; { lead byte ranges } UnicodeDefaultChar: WideChar; Codepage: UINT; CodePageName: array[0..MAX_PATH -1] of AnsiChar; end; TCPInfoExA = _cpinfoExA; TCPInfoEx = TCPInfoExA; function GetCPInfoEx(CodePage: UINT; dwFlags: DWORD; var lpCPInfoEx: TCPInfoEx): BOOL; stdcall; external kernel32 name 'GetCPInfoExA'; procedure TForm1.Button1Click(Sender: TObject); var LCPInfo: TCPInfoEx; begin if GetCPInfoEx(GetACP, 0, LCPInfo) then begin ShowMessageFmt('$%4x (%d) => "%s"', [LCPInfo.Codepage, LCPInfo.Codepage, LCPInfo.CodePageName]); end; end; Цитата:
Код:
procedure TForm1.Button2Click(Sender: TObject); var fs: TFileStream; s: RawByteString; begin fs := TFileStream.Create('ИмяФайла', fmOpenRead); try SetLength(s, fs.Size); fs.Read(Pointer(s)^, fs.Size); SetMultiByteConversionCodePage(1251); // Это достаточно сделать однажды, например в FormCreate Edit1.Text := s; finally fs.Free; end; end; Цитата:
Цитата:
|
#20
|
|||
|
|||
пробовал с XE5 тот же результат, кстати чтобы затестить код не таская на другую машину можно просто поменять в реестре кодовую страницу дла 1251 поставить 1252 и перезагрузится
Код:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage] "1251"="c_1252.nls" |
#21
|
||||
|
||||
Цитата:
Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
hilaryon (17.12.2013)
|