1

配置:

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

我的意图:

我开始移植 2007 年编写的旧包(10 个模块)。它具有完整的 unicode 支持,我想保留这种能力。

class UnicodeBom(T)它的作者为此目的编写了一个特定的模块(

我清理了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)方法相关的代码文档:

转换提供的内容。检查内容是否有 BOM 签名,该签名已被剥离。如果根据编码类型不应该存在签名,则如果存在签名,则会引发异常。相反,如果当前编码期望存在的签名不存在已知签名,则会引发异常


我的问题:

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

提前致谢。

4

1 回答 1

0

通过一一解决所有提出的问题,我最终成功地将所有模块移植到 DMD 2.59。

于 2012-06-09T09:39:44.630 回答