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 [] без спецификации)?
Заранее спасибо.
FYI: Я думаю, что они планируют отказаться от Streams или чего-то еще, в пользу диапазонов ... просто хедз-ап. – Mehrdad
@Mehrdad: Спасибо, что комментировали. Это ценная информация. – menjaraz