Простите, но Вы конкатенируете не строки, а строку и "контейнер" для 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

Ответить