2012-05-30 67 views
1

配置: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)?

在此先感谢。

+0

仅供参考:我认为他们打算弃用Streams或其他方法,转而使用范围......只是一个小小的问题。 – Mehrdad

+0

@Mehrdad:谢谢你的评论。这是一个有价值的信息。 – menjaraz

回答

0

我最终成功将所有模块移植到DMD 2.59中,逐个修正了所有提出的问题。