我的路径是 UTF-16 字符串。他们中的大多数只使用 ASCII 集,所以像这样的文件名将test
被存储为
T \x00 E \x00 S \x00 T \x00
我Encoding.Unicode.GetString(bytes)
用来读取字符串并且它工作正常(当我将它们打印到控制台或表单控件时,它会按我的预期显示),但是当我想使用以下代码实际创建具有给定文件名的文件时
BinaryWriter outFile = new BinaryWriter(File.OpenWrite(path));
我得到一个例外
Unhandled Exception: System.ArgumentException: Illegal characters in path.
at System.IO.Path.CheckInvalidPathChars(String path)
at System.IO.Path.GetFileName(String path)
这可能是因为那里有空字符(可能它在内部存储了原始字节数组),但我不知道如何处理它。不过,并非所有字符串都是 ASCII,并且一些字符使用两个字节。
更新:
原来非法字节只是填充到字符串中的空字节。但是,我不能简单地去除所有尾随空字节,但我也不知道字符串的长度。如何从每个字符存储在 n 个字节中的字符串中去除空字节?