Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Unicode -> cp1251 [D6, WinXP]


Страницы:   1 2

georgius ©   (2006-12-18 18:40:00) 

Появилась срочная необходимость конвертировать юникод обратно в кириллицу. Строки содержат русский и латинский текст и ... псевдографику, так что легких путей нет.
WideCharToMultiByte возвращает какую-то муть, даже длина строки не соответствует исходной.


Zeqfreed   (2006-12-19 22:31:00) [1]

> umbra ©   (19.12.06 19:52) [29]

> И, согласитесь, они все таки сокращают размер передаваемых
> данных (если считать, что в основном используются символы
> с кодами размером в байт) убирая те самые нули

UTF-8 ни для какого диапазона символов не сокращает размер передаваемых данных. Для русского языка, например, в этой кодировке будут использованы 2 байта на символ, а для символов китайского - все четыре. Размер данных сохраняется только для символов из стандартного набора ANSI символов.


Anatoly Podgoretsky   (2006-12-19 20:39:00) [2]

> umbra  (19.12.2006 20:04:31)  [31]

Намек, намек


umbra   (2006-12-19 20:04:00) [3]

2 Anatoly Podgoretsky ©   (19.12.06 19:59) [30]

у меня такое впечатление, что это намек, но моих способностей не хватает, чтобы им воспользоваться.


Anatoly Podgoretsky   (2006-12-19 19:59:00) [4]

> umbra  (19.12.2006 19:52:29)  [29]

7 или 8 означает количество бит!


umbra   (2006-12-19 19:52:00) [5]


> 2 или 4 значит количество байт
>

я в курсе :)


> во первых при передаче с помощью UTF объем увеличивается

насколько я знаю, UTF-7 сделана специально для передачи по каналам связи, а Utf-8 - чтобы использовать два байта на символ только когда это необходимо. И, согласитесь, они все таки сокращают размер передаваемых данных (если считать, что в основном используются символы с кодами размером в байт) убирая те самые нули


Anatoly Podgoretsky   (2006-12-19 19:40:00) [6]

> umbra  (19.12.2006 18:10:24)  [24]

> (нужные, в теории, для уменьшения объема передаваемых данных)

В теории не так, во первых при передаче с помощью UTF объем увеличивается, а нужны транспортные "кодировки" для прохождения через транспортный канал. UTF-7 использует семибитные символы, а UTF-8 восьмибитные соответственно.  В итоге в упакованом виде в них отсутствуют непечатные символы, не совместимые с транспортным каналом, особенно опасен байт со значением 0, а для западноевропейских это каждый второй байт. Не лучше дело обстоит и с другими языками, для кирилицы это байт 04, есть и другие которые не совместимы с каналом, особенно с американским 7 битным, такие сервера еще остались.


Anatoly Podgoretsky   (2006-12-19 19:33:00) [7]

> umbra  (19.12.2006 18:27:26)  [26]

2 или 4 значит количество байт


umbra   (2006-12-19 18:27:00) [8]

ну, UCS-4 в данный исторический период нужна только каким-то суперэкзотическим языкам или наборам неязыковых символов. Я так понимаю, что это Уникод, версия 2. Т.е. это не "кодировка для передачи", а, пока что ненужный, стандарт.


Джо   (2006-12-19 18:17:00) [9]

Ну, они не только для «уменьшения объема передаваемых данных» служат. UCS-4, например, явно избыточна во многих случаях и употребляется для того, чтобы кол-во байт для любой кодовой позиции было одинаковым.


umbra   (2006-12-19 18:10:00) [10]

Джо ©   (19.12.06 17:02) [22]

в контексте обсуждения это больше всего похоже на "кодировка для передачи", поскольку, хотя набор кодов символов один (уникод), из-за различия в кол-ве байт на символ, транспортные кодировки (нужные, в теории, для уменьшения объема передаваемых данных) могут быть разными (упомянутые UTF-8, UTF-7). И хотя коды символов при этом одинаковы, но, чтобы восстановить текст, все равно надо знать способ кодирования, примененный при передаче.


Anatoly Podgoretsky   (2006-12-19 17:12:00) [11]

> Джо  (19.12.2006 17:02:22)  [22]

Я бы не стал переводить, во первых там много мути намутили, во вторых в отрыве от контекста. Сообственно мне перевод, думаю и тебе, не требуется, мы всегда знаем о чем в том или другом случае идет речь.
Но если предположить, что речь именно об Юникод, то можно перевести как масло масляное. Подчеркивают, что для кодирования символов используется Юникод.


Джо   (2006-12-19 17:02:00) [12]

Кстати, предлагаю разрулить терминологическую неточность (двусмысленность). Каким образом следует переводить выражание "Unicode encodings"?


Anatoly Podgoretsky   (2006-12-19 16:46:00) [13]

> Джо  (19.12.2006 16:43:20)  [20]

Не играет роли, Юникод один, пока, потом может и второй получит распространение.
С этим Юникодом и Микрософтом вообще смешная вещь.


Джо   (2006-12-19 16:43:00) [14]

Ну, это вопрос перевода терминологии на русский язык.
Тем не менее, как бы мы не называли способ записи, «кодировкой» или нет, если не знать этот способ, то интерпретировать строку нельзя. А способов записи — множество.


Anatoly Podgoretsky   (2006-12-19 16:39:00) [15]

> Джо  (19.12.2006 16:36:18)  [18]

Я не говорю что применимо, Юникод это всего одна кодировка, в отличии от прочего.


Джо   (2006-12-19 16:36:00) [16]

> [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:34:00) [17]

> tesseract  (19.12.2006 16:30:16)  [16]

Работает, но ограничено, если повезет, что ACP правильный и Юникод содержит символы только данного ACP то все отработает как требуется без всякой магии и дополнительного кода. Но это если повезет, вот мне обычно не везет.


tesseract   (2006-12-19 16:30:00) [18]


> Anatoly Podgoretsky ©   (19.12.06 16:26) [13]


про string:=WideString и наоборот :-)


Anatoly Podgoretsky   (2006-12-19 16:29:00) [19]

> Джо  (19.12.2006 16:27:14)  [14]

Поэтому только всего два Юникода - ucs2 aka Unicode16 и ucs4 aka Unicode32
Нету у Юникод кодировок, в отличии от ASCII/ANSI


Джо   (2006-12-19 16:27:00) [20]

> [12] Anatoly Podgoretsky ©   (19.12.06 16:25)
> > Джо  (19.12.2006 16:19:10)  [10]
>
> а кодировка это не encodings, а code page

Code page — это «кодовая страница». В Юникоде вообще это понятие упразднено за ненужностью.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо