我需要在OCaml中大写一些文本(即将第一个字母大写)。不幸的是,我的文本是UTF-8,标准库只支持ASCII。
我在电池中找到了uppercase
功能,但它似乎仅在旧版本中可用。 Camomile(看起来是处理UTF-8的最佳选择)似乎已经死了,而且文档很少。
答案 0 :(得分:3)
甘菊是这里的解决方案。有关sourceforge的文档:http://camomile.sourceforge.net/dochtml/index.html 它非常功能化,可能一见钟情,可能需要一些时间来掌握它,但它可以完成这项任务。
大写将是:
# open CamomileLibraryDefault;;
# module CM = Camomile.CaseMap.Make(Camomile.UTF8);;
# print_endline (CM.titlecase "привет");;
Привет
答案 1 :(得分:3)
感谢ygrek的帮助,我找到了问题的答案:
let capitalize (s : string) : string =
if s = "" then "" else
let open CamomileLibraryDefault.Camomile in
let module CM = CaseMap.Make(UTF8) in
let first = UTF8.get s 0 in
let capital = CM.uppercase (UTF8.init 1 (fun _ -> first)) in
UTF8.init (UTF8.length s) (function 0 -> UTF8.get capital 0 | i -> UTF8.get s i)