d - 统一码转换



>Config:

  • 操作系统: 视窗 7 (32 位)
  • DMD 2.58 使用 Phobos 标准库

我的意图:

我开始移植一个早在 2007 年编写的旧包(10 个模块)。它具有完整的Unicode支持,我想保留该功能。

它的作者为此编写了一个特定的模块(class UnicodeBom(T)):一个非常复杂的方法(至少就我的能力而言,因为我只是一个热情的人和一个初学者,只有一些C++/Qt/C#入门经验)!

我从所有模块中清理了任何Tango代码片段,并成功地在我的盒子上工作(肯定是在单元/模块级别),到目前为止,10 个模块中只有 4 个。


代码片段:

this(Stream st) {
  void[] buf;
  buf.length = cast(uint) st.size;
  st.readBlock(buf.ptr, cast(uint) st.size);
  auto unicode = new UnicodeBom!(wchar)(Encoding.Unknown); // <<< to refactor
  mSourceBuffer = unicode.decode(buf); // <<< to refactor
}

哪里

  • st(参数)是一个std.stream.Stream
  • mSourceBuffer(私有字段)是一个wchar[]

报价:

摘自与final T[] decode (void[] content)方法相关的代码文档:

转换提供的内容。检查内容 对于被剥离的物料清单签名。一个例外是 如果存在签名,则抛出,根据 编码类型,它不应该是。相反,一个例外 如果没有已知的签名,则抛出当前 编码期望存在一个


我的问题:

是否有一种最新且更惯用的方法,使用开箱即用的Druntime和/或Phobos资源导致相同的结果(即加载 UTF8/16/32 文件并将它们转换为没有 BOM 的 wchar[])?

提前谢谢。

我最终通过逐个修复所有提出的问题,成功地将所有模块移植到 DMD 2.59。

最新更新