在D?
中从文件内容中删除非ASCII字符的惯用方法是什么?我试过了:
auto s = (cast(string) std.file.read(myPath)).filter!( a => a < 128 ).array;
给了我:
std.utf.UTFException@C:\D\dmd2\windows\bin\..\..\src\phobos\std\utf.d(1109): Invalid UTF-8 sequence (at index 1)
和s是dstring;和
auto s = (cast(string) std.file.read(myPath)).tr("\0-~", "", "cd");
给了我:
core.exception.UnicodeException@src\rt\util\utf.d(290): invalid UTF-8 sequence
在运行时。
我试图在unsupported encoding中解析(几乎已弃用的std.xml模块)xml文件,但我可以删除有问题的字符。
答案 0 :(得分:7)
如果你做任何事情都认为它是一个字符串,D会尝试将其视为UTF-8。相反,请将其视为一系列字节,因此请将cast(string)
替换为cast(ubyte[])
并执行过滤。
阅读并过滤后,您可以/然后/将其转换回字符串。所以这应该做你需要的:
auto s = cast(string) (cast(ubyte[])(std.file.read(myPath)).filter!( a => a < 128 ).array);