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