提问人:RandomB 提问时间:10/25/2023 更新时间:10/28/2023 访问量:30
UTF-8,SML/NJ 中的 Unicode
UTF-8, Unicode in SML/NJ
问:
我在 Windows 10 上使用 SML/NJ(版本 110.99.4)。
我有一个包含 UTF-8 编码文本文件的结构:
...
let
val s:string = "søk"
in
print s
end;
...
我的控制台有 65001 代码页(即 UTF-8) - 报告它。
此代码打印 .那么,我有3个问题:chcp
søk
- 据我所知,SML/NJ 具有 Unicode 的(和)类型,但它对于 Windows 是可选的(实际上它丢失了),我以为那是 ASCII 字符串,但似乎不是。那么,什么是类型?代码点?UTF-8?
widestring
widechar
string
string
- SML/NJ 的可移植性如何?我可以在需要 UTF-8 的任何地方(例如在 Linux 上)使用它吗?
string
- 对于所有 SML 实现,此行为是否相似?
string
此外,我的 SML/NJ 版本具有 UTF8 结构(通过)。它回忆说.但是我看到这允许正确打印非ASCII字符串。同时,该结构召回.它甚至让我更困惑:什么包含:或(但 UTF8)?那么缺少什么呢?open UTF8
wchar
string
String
char
string
wchar
char
widechar
缴费灵。尝试在 sml.bat repl 的会话中输入非 ASCII 字符串失败,并显示:
stdIn:2.10 Error: illegal non-printing character in string
stdIn:2.11 Error: illegal non-printing character in string
stdIn:2.12 Error: illegal non-printing character in string
...
对不起,对于这么多问题,我将不胜感激地澄清 Unicode、UTF-8 在标准 ML(和 SML/NJ)世界中的状态以及使用它们的便捷方法。
答:
0赞
RandomB
10/28/2023
#1
例如,我发现这样的库:https://github.com/cannam/sml-utf8 定义了.它允许对 UTF8/宽字符串和其他“标准”(用于 SML)字符串操作进行编码/解码。我用 SML/NJ 尝试过,似乎有效。WdString
评论
string
没有编码。如果你看,你会发现它有四个元素;其中两个代表“ø”。这些显示为“ø”是因为您的编辑器和控制台都以这种方式解释它们,而 SML 没有参与其中。explode "søk"