Как использовать ромашку для струн UTF8 в ocaml?
Я скачал ромашку и установил ее, и я готов ее использовать.
Вопрос в том, как мне это использовать?
в ocaml, для строки по умолчанию, я просто делаю let s = "a string";;
но что с Camomile
?
например, если я хочу построить utf8
строка こんにちは
(японское слово "привет", скопировано с Google Translate), как мне это сделать Camomile
?
Редактировать:
Забавно, что сказано, что ocaml
не могу поддержать utf8
, но я попробовал этот код
let s = "你好";;
let _ = print_string s;print_string "\n";;
это работало в ocaml. Но почему?? 你好
это китаец, как может ocaml распечатать и справиться, если все говорят ocaml 4.00.1
не выдерживаю utf8
?
3 ответа
Вот краткая презентация разных актеров:
ASCII - это набор символов (их 127) и код для их представления (7-разрядный).
Unicode - это набор символов (их намного больше, чем 127).
UTF-8 - это код для представления символов Юникода.
Ваш терминал. Он интерпретирует выходные байты вашей программы как символы в кодировке UTF-8 и отображает соответствующие символы Юникода.
OCaml обрабатывает последовательности байтов (OCaml использует имя
char
но это вводит в заблуждение и названиеbyte
было бы более уместно).
Таким образом, если OCaml выводит последовательность байтов, соответствующую коду UTF-8 для "你好"
, ваш терминал будет интерпретировать его как строку utf-8 и выведет 你好
, Но для OCaml, "你好"
это просто последовательность из 6 байтов.
Я думаю, что TörökEdwin рассказал вам все, что вам нужно знать. UTF-8 специально разработан как способ хранения значений Unicode (кодовые точки) в виде серии 8-битных байтов, когда код используется для работы со строками ASCII C. Поскольку строки OCaml представляют собой последовательность 8-битных байтов, нет проблем с сохранением значения UTF-8. Если программа, которую вы используете для создания исходного кода OCaml, обрабатывает UTF-8, то у нее не будет проблем с созданием строки, содержащей значение UTF-8. Вам не нужно делать ничего особенного, чтобы это произошло. (Как я уже сказал, я делал это много раз сам.)
Если вам не нужно обрабатывать значение, то функции ввода / вывода OCaml также могут записать такое значение (или прочитать его), и если кодирование вашего дисплея - UTF-8 (именно это я и использую), он будет отображаться правильно. Но чаще всего вам нужно будет обрабатывать ваши ценности. Если вы измените свой код на (например) просто записать длину строки, вы можете начать понимать, зачем вам нужна специальная библиотека для обработки UTF-8.
Если вам интересно, почему определенная строка Unicode представлена в виде определенной серии байтов в кодировке UTF-8, вам просто нужно прочитать об UTF-8. Статья в Википедии ( UTF-8) может быть разумным местом для начала.
Библиотеку UTF8 необходимо использовать только в том случае, если вы хотите выполнить преобразование между различными кодировками, нормализовать юникод или если вы хотите получить доступ к отдельным кодовым точкам.
OCaml обрабатывает строки как 8-битные двоичные значения указанной длины, поэтому вы можете напрямую использовать любую кодировку. т.е. вы можете просто присвоить значение UTF8 непосредственно переменной:
# let foo = "こんにちは";;
val foo : string =
"\227\129\147\227\130\147\227\129\171\227\129\161\227\129\175"