>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。