我相信此时Phobos文件I/O的唯一真正选项(除了调用C函数)是std.file.readText
和std.stdio.File
.readText
将读取文件作为字符,wchars或dchars的数组(默认为immutable(char)[] - 即字符串).我相信对于字符,wchars和dchars,编码必须分别是UTF-8,UTF-16和UTF-32,尽管我必须深入挖掘源代码才能确定.任何与这些编码兼容的编码(例如ASCII与UTF-8兼容)应该可以正常工作.
如果你使用File
,那么你有几个函数来读取文件 - 包括readln
和rawRead
.但是,您基本上使用UTF-8,UTF-16或UTF-32兼容编码来readText
读取文件,或者您将其作为二进制数据读取并自行操作.
因为,D中的字符类型分别是char,wchar和dchar,它们分别是UTF-8,UTF-16和UTF-32代码单元,除非你想以二进制格式读取数据,否则该文件将具有以与这三种类型的unicode之一兼容的编码进行编码.给定特定编码中的字符串,您可以使用函数将其转换为另一种编码std.utf
.但是,除了使用readText
尝试以给定编码读取文件并查看是否成功之外,我不知道有任何方法可以查询文件的编码类型.
因此,除非您想自己处理文件并在运行中确定它所使用的编码,否则最好的选择可能是使用readText
每个连续的字符串类型,使用第一个成功的字符串.但是,由于文本文件通常是UTF-8或UTF-8兼容编码,我希望readText
与普通字符串一起使用几乎总能正常工作.