配置:Unicode转换
- 操作系统:Windows 7(32位)
- DMD 2.58使用福波斯标准库
我的意图:
我开始移植一个旧的包(10模块es)在2007年写了回来。它提供了一个完整的unicode支持,我想保留这个功能。
它的作者为此写了一个特定的模块(class UnicodeBom(T)
):一个非常复杂的方法(至少对我来说,考虑到我只是一个热情的初学者,只有一些C++/Qt/C#入门经验) !
我清除了所有模块中的任何Tango
代码片段,并成功在我的包装箱上工作(单位/模块级别肯定),目前只有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)?
在此先感谢。
仅供参考:我认为他们打算弃用Streams或其他方法,转而使用范围......只是一个小小的问题。 – Mehrdad
@Mehrdad:谢谢你的评论。这是一个有价值的信息。 – menjaraz