Простите, но Вы конкатенируете не строки, а строку и "контейнер" для
utf8, который, как я уже писал, введен не потому что utf8 это другая
кодировка, а потому что utf8 это кодировка с переменной длинной
кодовой позиции и символа. Как этот пример связан с изначальным
тезисом о защите от конкатенации СТРОК в разных кодировках? В общем
случае этот тезис не подтверждается, ведь latin1 и cp1251 легко
конкатинируются. Да и Вы же сами в конце показали как прекрасно
конкатенируютя СТРОКИ в utf8 и latin1. Какая от этого польза в
реальном коде?
01.09.2012, в 15:49, Андрей П. Ковбович <[email protected]> написал
(а):
1 сентября 2012 г., 2:14 пользователь Nikita Zubkov
<[email protected]> написал:
То есть получается, что я могу сложить строки (type string) в коди
ровках
utf8 и latin1. Где в приведенном примере это запрещение? В string
ложится
байтовая последовательность, не привязанная к кодировке и это не
контролируется ни на каком этапе.
Прежде чем делать ошибочные выводы, проверили бы.
# open CamomileLibraryDefault.Camomile;;
# module UTF8 = (UTF8 : UnicodeString.Type);;
module UTF8 : CamomileLibraryDefault.Camomile.UnicodeString.Type
# module UTF8Conv = CharEncoding.Make(UTF8);;
module UTF8Conv :
sig
type text = UTF8.t
val decode :
CamomileLibraryDefault.Camomile.CharEncoding.t -> string -> text
val encode :
CamomileLibraryDefault.Camomile.CharEncoding.t -> text -> string
end
# let latin1 = "hello";;
val latin1 : string = "hello"
# let utf8 = UTF8Conv.decode (CharEncoding.latin1) latin1;;
val utf8 : UTF8Conv.text = <abstr>
# latin1, utf8;;
- : string * UTF8Conv.text = ("hello", <abstr>)
теперь пробуем склеить строки
# latin1 ^ utf8;;
Error: This expression has type UTF8Conv.text = UTF8.t
but an expression was expected of type string
а если снова привести к одной кодировке
# latin1 ^ (UTF8Conv.encode CharEncoding.latin1 utf8);;
- : string = "hellohello"
Таким образом, Ваш начальный тезис не подтвердился. Данная библиот
ека не
использует строгую типизацию в указанной Вами манере и тезис про и
звращение
в силе.
Подтвердился, см. выше.
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org