2012-05-30 52 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中,逐個修正了所有提出的問題。