2012-05-30 2 views
1

Config:Unicode преобразования

  • ОС: Windows 7 (32 бита)
  • DMD 2,58 с использованием стандартной библиотеки Phobos

Мой Намерение:

Я начал переносить старый пакет (10 модулей es), написанный еще в 2007 году. Он показал полную поддержку юникода, и я хочу сохранить эту возможность.

Его автор написал для этой цели специальный модуль (class UnicodeBom(T)): очень привлекательный подход (по меньшей мере, к моей способности, учитывая, что я всего лишь энтузиаст и новичок только с некоторыми примерами C++/Qt/C#) !

Я очистил любой фрагмент кода Tango от всех модулей и получил возможность работать на моем ящике (на уровне модуля/модуля наверняка) только 4 модуля из 10 до сих пор.


фрагмент кода:

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 
} 

где

  • ул (параметр) является std.stream.Stream
  • mSourceBuffer (частное поле) является wchar[]

Цитата:

Выписка из кода документации, связанной с final T[] decode (void[] content) способом:

Преобразовать предоставленный контент. Содержание проверяется на подпись спецификации, которая лишена. Исключение составляет , если подпись присутствует, когда в соответствии с типом кодирования этого не должно быть. И наоборот, исключение отбрасывается, если не известны подписи, где ток кодирования ожидает один присутствовать


Мой вопрос:

Есть ли до настоящего времени и более идиоматических подход, используя из коробки Druntime и/или Phobos ресурсы, приводящие к одному и тому же результату (а именно загрузку файлов UTF8/16/32 и преобразование их в wchar [] без спецификации)?

Заранее спасибо.

+0

FYI: Я думаю, что они планируют отказаться от Streams или чего-то еще, в пользу диапазонов ... просто хедз-ап. – Mehrdad

+0

@Mehrdad: Спасибо, что комментировали. Это ценная информация. – menjaraz

ответ

0

В итоге мне удалось перенести все модули на DMD 2.59, установив по одному все поднятые проблемы.

Смежные вопросы