配置:
- 操作系统: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)?
提前致谢。