![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Unicode -> cp1251 [D6, WinXP]
georgius © (2006-12-18 18:40:00)Появилась срочная необходимость конвертировать юникод обратно в кириллицу. Строки содержат русский и латинский текст и ... псевдографику, так что легких путей нет.
WideCharToMultiByte возвращает какую-то муть, даже длина строки не соответствует исходной.
Anatoly Podgoretsky (2006-12-19 16:26:00) [21]> tesseract (19.12.2006 16:23:11) [11]
Надеюсь, ты про размер говорил, а не про буфер?
Anatoly Podgoretsky (2006-12-19 16:25:00) [22]> Джо (19.12.2006 16:19:10) [10]
а кодировка это не encodings, а code page
tesseract (2006-12-19 16:23:00) [23]
> Anatoly Podgoretsky © (19.12.06 16:01) [7]
Мне в Turbo Delphi почему-то постоянно везёт :-)
Джо (2006-12-19 16:19:00) [24]> [9] Anatoly Podgoretsky © (19.12.06 16:13)
> > Джо (19.12.2006 16:05:08) [8]
>
> > UTF-8 и даже UTF-7
>
> Это не кодировка, а транспортная упаковка того же Юникод,
> это все равно, что сказать, что Base64/QP/PlainText/Mime
> это кодировка.
Нет, терминологически, UTF-8, UTF-7, CESU-8 и т.д — это именно "encodings", т.е., «кодировки».
Anatoly Podgoretsky (2006-12-19 16:13:00) [25]> Джо (19.12.2006 16:05:08) [8]
> UTF-8 и даже UTF-7
Это не кодировка, а транспортная упаковка того же Юникод, это все равно, что сказать, что Base64/QP/PlainText/Mime это кодировка.
Джо (2006-12-19 16:05:00) [26]> [5] Anatoly Podgoretsky © (19.12.06 15:46)
> > Джо (19.12.2006 15:43:04) [4]
>
> Я вообще то за все время видел только UCS2, а про UCS4 только
> слышал, а других Юникодов не существует
Кроме UCS2 (AKA UTF-16), есть еще UTF-8 и даже UTF-7. Кроме того, строка может быть предварена маркером порядка байтов (FF FE или FE FF), а может и нет. И т.д., и т.п. В общем, кодировок, основанных на UNICODE — как собак нерезанных :)
Anatoly Podgoretsky (2006-12-19 16:01:00) [27]> tesseract (19.12.2006 15:49:06) [6]
1. возможно, если повезет
2. 0 за nil отругает, если конечная кодировка OEM/ANSI то длина заранее известна
tesseract (2006-12-19 15:49:00) [28]А просто String:=WideString? должна сработать конвертация.
> WideCharToMultiByte возвращает какую-то муть, даже длина
> строки не соответствует исходной.
И не должна. Функцию надо раз вызвать c nil в качестве получаетля, для того чтобы определить количество памяти под строку.
Anatoly Podgoretsky (2006-12-19 15:46:00) [29]> Джо (19.12.2006 15:43:04) [4]
Я вообще то за все время видел только UCS2, а про UCS4 только слышал, а других Юникодов не существует
Джо (2006-12-19 15:43:00) [30]> [3] Anatoly Podgoretsky © (19.12.06 09:47)
> > Джо (19.12.2006 4:23:02) [2]
>
> Но в Виндоус то используется один.
Мало ли откуда в его программе эти строки берутся. Может, из сети, может, из сообщений SMS, а может и из деревни от дедушки.
Anatoly Podgoretsky (2006-12-19 09:47:00) [31]> Джо (19.12.2006 4:23:02) [2]
Но в Виндоус то используется один.
Джо (2006-12-19 04:23:00) [32]Юникод он, как бы это сказать, разный бывает.
Anatoly Podgoretsky (2006-12-18 18:43:00) [33]> georgius (18.12.2006 18:40:00) [0]
Это тяжелых нет, а легкий путь как раз WideCharToMultiByte