Текущий архив: 2007.02.11;
Скачать: CL | DM;
ВнизUnicode -> cp1251 Найти похожие ветки
← →
georgius © (2006-12-18 18:40) [0]Появилась срочная необходимость конвертировать юникод обратно в кириллицу. Строки содержат русский и латинский текст и ... псевдографику, так что легких путей нет.
WideCharToMultiByte возвращает какую-то муть, даже длина строки не соответствует исходной.
← →
Anatoly Podgoretsky © (2006-12-18 18:43) [1]> georgius (18.12.2006 18:40:00) [0]
Это тяжелых нет, а легкий путь как раз WideCharToMultiByte
← →
Джо © (2006-12-19 04:23) [2]Юникод он, как бы это сказать, разный бывает.
← →
Anatoly Podgoretsky © (2006-12-19 09:47) [3]> Джо (19.12.2006 4:23:02) [2]
Но в Виндоус то используется один.
← →
Джо © (2006-12-19 15:43) [4]> [3] Anatoly Podgoretsky © (19.12.06 09:47)
> > Джо (19.12.2006 4:23:02) [2]
>
> Но в Виндоус то используется один.
Мало ли откуда в его программе эти строки берутся. Может, из сети, может, из сообщений SMS, а может и из деревни от дедушки.
← →
Anatoly Podgoretsky © (2006-12-19 15:46) [5]> Джо (19.12.2006 15:43:04) [4]
Я вообще то за все время видел только UCS2, а про UCS4 только слышал, а других Юникодов не существует
← →
tesseract © (2006-12-19 15:49) [6]А просто String:=WideString? должна сработать конвертация.
> WideCharToMultiByte возвращает какую-то муть, даже длина
> строки не соответствует исходной.
И не должна. Функцию надо раз вызвать c nil в качестве получаетля, для того чтобы определить количество памяти под строку.
← →
Anatoly Podgoretsky © (2006-12-19 16:01) [7]> tesseract (19.12.2006 15:49:06) [6]
1. возможно, если повезет
2. 0 за nil отругает, если конечная кодировка OEM/ANSI то длина заранее известна
← →
Джо © (2006-12-19 16:05) [8]> [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:13) [9]> Джо (19.12.2006 16:05:08) [8]
> UTF-8 и даже UTF-7
Это не кодировка, а транспортная упаковка того же Юникод, это все равно, что сказать, что Base64/QP/PlainText/Mime это кодировка.
← →
Джо © (2006-12-19 16:19) [10]> [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", т.е., «кодировки».
← →
tesseract © (2006-12-19 16:23) [11]
> Anatoly Podgoretsky © (19.12.06 16:01) [7]
Мне в Turbo Delphi почему-то постоянно везёт :-)
← →
Anatoly Podgoretsky © (2006-12-19 16:25) [12]> Джо (19.12.2006 16:19:10) [10]
а кодировка это не encodings, а code page
← →
Anatoly Podgoretsky © (2006-12-19 16:26) [13]> tesseract (19.12.2006 16:23:11) [11]
Надеюсь, ты про размер говорил, а не про буфер?
← →
Джо © (2006-12-19 16:27) [14]> [12] Anatoly Podgoretsky © (19.12.06 16:25)
> > Джо (19.12.2006 16:19:10) [10]
>
> а кодировка это не encodings, а code page
Code page — это «кодовая страница». В Юникоде вообще это понятие упразднено за ненужностью.
← →
Anatoly Podgoretsky © (2006-12-19 16:29) [15]> Джо (19.12.2006 16:27:14) [14]
Поэтому только всего два Юникода - ucs2 aka Unicode16 и ucs4 aka Unicode32
Нету у Юникод кодировок, в отличии от ASCII/ANSI
← →
tesseract © (2006-12-19 16:30) [16]
> Anatoly Podgoretsky © (19.12.06 16:26) [13]
про string:=WideString и наоборот :-)
← →
Anatoly Podgoretsky © (2006-12-19 16:34) [17]> tesseract (19.12.2006 16:30:16) [16]
Работает, но ограничено, если повезет, что ACP правильный и Юникод содержит символы только данного ACP то все отработает как требуется без всякой магии и дополнительного кода. Но это если повезет, вот мне обычно не везет.
← →
Джо © (2006-12-19 16:36) [18]> [15] Anatoly Podgoretsky © (19.12.06 16:29)
> > Джо (19.12.2006 16:27:14) [14]
>
> Поэтому только всего два Юникода - ucs2 aka Unicode16 и
> ucs4 aka Unicode32
> Нету у Юникод кодировок, в отличии от ASCII/ANSI
Отчего же «поэтому»?
Я как раз понимаю так, что Юникод, собственно говоря, это просто большая таблица кодовых позиций. А как они будут записаны — это уже вопрос конкретной кодировки (encoding). Понятие code page вообще к Юникоду неприменимо в принципе, это совсем из другой оперы.
← →
Anatoly Podgoretsky © (2006-12-19 16:39) [19]> Джо (19.12.2006 16:36:18) [18]
Я не говорю что применимо, Юникод это всего одна кодировка, в отличии от прочего.
← →
Джо © (2006-12-19 16:43) [20]Ну, это вопрос перевода терминологии на русский язык.
Тем не менее, как бы мы не называли способ записи, «кодировкой» или нет, если не знать этот способ, то интерпретировать строку нельзя. А способов записи — множество.
← →
Anatoly Podgoretsky © (2006-12-19 16:46) [21]> Джо (19.12.2006 16:43:20) [20]
Не играет роли, Юникод один, пока, потом может и второй получит распространение.
С этим Юникодом и Микрософтом вообще смешная вещь.
← →
Джо © (2006-12-19 17:02) [22]Кстати, предлагаю разрулить терминологическую неточность (двусмысленность). Каким образом следует переводить выражание "Unicode encodings"?
← →
Anatoly Podgoretsky © (2006-12-19 17:12) [23]> Джо (19.12.2006 17:02:22) [22]
Я бы не стал переводить, во первых там много мути намутили, во вторых в отрыве от контекста. Сообственно мне перевод, думаю и тебе, не требуется, мы всегда знаем о чем в том или другом случае идет речь.
Но если предположить, что речь именно об Юникод, то можно перевести как масло масляное. Подчеркивают, что для кодирования символов используется Юникод.
← →
umbra © (2006-12-19 18:10) [24]Джо © (19.12.06 17:02) [22]
в контексте обсуждения это больше всего похоже на "кодировка для передачи", поскольку, хотя набор кодов символов один (уникод), из-за различия в кол-ве байт на символ, транспортные кодировки (нужные, в теории, для уменьшения объема передаваемых данных) могут быть разными (упомянутые UTF-8, UTF-7). И хотя коды символов при этом одинаковы, но, чтобы восстановить текст, все равно надо знать способ кодирования, примененный при передаче.
← →
Джо © (2006-12-19 18:17) [25]Ну, они не только для «уменьшения объема передаваемых данных» служат. UCS-4, например, явно избыточна во многих случаях и употребляется для того, чтобы кол-во байт для любой кодовой позиции было одинаковым.
← →
umbra © (2006-12-19 18:27) [26]ну, UCS-4 в данный исторический период нужна только каким-то суперэкзотическим языкам или наборам неязыковых символов. Я так понимаю, что это Уникод, версия 2. Т.е. это не "кодировка для передачи", а, пока что ненужный, стандарт.
← →
Anatoly Podgoretsky © (2006-12-19 19:33) [27]> umbra (19.12.2006 18:27:26) [26]
2 или 4 значит количество байт
← →
Anatoly Podgoretsky © (2006-12-19 19:40) [28]> umbra (19.12.2006 18:10:24) [24]
> (нужные, в теории, для уменьшения объема передаваемых данных)
В теории не так, во первых при передаче с помощью UTF объем увеличивается, а нужны транспортные "кодировки" для прохождения через транспортный канал. UTF-7 использует семибитные символы, а UTF-8 восьмибитные соответственно. В итоге в упакованом виде в них отсутствуют непечатные символы, не совместимые с транспортным каналом, особенно опасен байт со значением 0, а для западноевропейских это каждый второй байт. Не лучше дело обстоит и с другими языками, для кирилицы это байт 04, есть и другие которые не совместимы с каналом, особенно с американским 7 битным, такие сервера еще остались.
← →
umbra © (2006-12-19 19:52) [29]
> 2 или 4 значит количество байт
>
я в курсе :)
> во первых при передаче с помощью UTF объем увеличивается
насколько я знаю, UTF-7 сделана специально для передачи по каналам связи, а Utf-8 - чтобы использовать два байта на символ только когда это необходимо. И, согласитесь, они все таки сокращают размер передаваемых данных (если считать, что в основном используются символы с кодами размером в байт) убирая те самые нули
← →
Anatoly Podgoretsky © (2006-12-19 19:59) [30]> umbra (19.12.2006 19:52:29) [29]
7 или 8 означает количество бит!
← →
umbra © (2006-12-19 20:04) [31]2 Anatoly Podgoretsky © (19.12.06 19:59) [30]
у меня такое впечатление, что это намек, но моих способностей не хватает, чтобы им воспользоваться.
← →
Anatoly Podgoretsky © (2006-12-19 20:39) [32]> umbra (19.12.2006 20:04:31) [31]
Намек, намек
← →
Zeqfreed © (2006-12-19 22:31) [33]> umbra © (19.12.06 19:52) [29]
> И, согласитесь, они все таки сокращают размер передаваемых
> данных (если считать, что в основном используются символы
> с кодами размером в байт) убирая те самые нули
UTF-8 ни для какого диапазона символов не сокращает размер передаваемых данных. Для русского языка, например, в этой кодировке будут использованы 2 байта на символ, а для символов китайского - все четыре. Размер данных сохраняется только для символов из стандартного набора ANSI символов.
Страницы: 1 вся ветка
Текущий архив: 2007.02.11;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.052 c