UTF-8,SML/NJ 中的 Unicode

UTF-8, Unicode in SML/NJ

提问人:RandomB 提问时间:10/25/2023 更新时间:10/28/2023 访问量:30

问:

我在 Windows 10 上使用 SML/NJ(版本 110.99.4)。

我有一个包含 UTF-8 编码文本文件的结构:

...
    let
      val s:string = "søk"
    in
      print s
    end;
...

我的控制台有 65001 代码页(即 UTF-8) - 报告它。 此代码打印 .那么,我有3个问题:chcpsøk

  1. 据我所知,SML/NJ 具有 Unicode 的(和)类型,但它对于 Windows 是可选的(实际上它丢失了),我以为那是 ASCII 字符串,但似乎不是。那么,什么是类型?代码点?UTF-8?widestringwidecharstringstring
  2. SML/NJ 的可移植性如何?我可以在需要 UTF-8 的任何地方(例如在 Linux 上)使用它吗?string
  3. 对于所有 SML 实现,此行为是否相似?string

此外,我的 SML/NJ 版本具有 UTF8 结构(通过)。它回忆说.但是我看到这允许正确打印非ASCII字符串。同时,该结构召回.它甚至让我更困惑:什么包含:或(但 UTF8)?那么缺少什么呢?open UTF8wcharstringStringcharstringwcharcharwidechar

缴费灵。尝试在 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)世界中的状态以及使用它们的便捷方法。

Unicode UTF-8 SML SMLNJ

评论

1赞 molbdnilo 10/25/2023
string没有编码。如果你看,你会发现它有四个元素;其中两个代表“ø”。这些显示为“ø”是因为您的编辑器和控制台都以这种方式解释它们,而 SML 没有参与其中。explode "søk"
0赞 RandomB 10/25/2023
这是有道理的。您@molbdnilo知道一些支持 Unicode 的 SML 实现吗?我昨天读了很多与SML相关的邮件线程,但我有一种感觉,不支持Unicode。
1赞 molbdnilo 10/25/2023
我对此表示怀疑——这是一种非常小众的“学术”语言。我认为您的“最佳”选择是将语言切换到 F#。(当然,这也取决于你所说的“支持”是什么意思。您想要实际的 Unicode 字符串还是“以 UTF-8 编码的 Unicode”字符串足够好?

答:

0赞 RandomB 10/28/2023 #1

例如,我发现这样的库:https://github.com/cannam/sml-utf8 定义了.它允许对 UTF8/宽字符串和其他“标准”(用于 SML)字符串操作进行编码/解码。我用 SML/NJ 尝试过,似乎有效。WdString