从文件中删除字符串中的非ASCII字符

时间:2014-06-20 09:59:14

标签: ascii d

在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文件,但我可以删除有问题的字符。

1 个答案:

答案 0 :(得分:7)

如果你做任何事情都认为它是一个字符串,D会尝试将其视为UTF-8。相反,请将其视为一系列字节,因此请将cast(string)替换为cast(ubyte[])并执行过滤。

阅读并过滤后,您可以/然后/将其转换回字符串。所以这应该做你需要的:

auto s = cast(string) (cast(ubyte[])(std.file.read(myPath)).filter!( a => a < 128 ).array);