私のパスは 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)
おそらくそこにnull文字があるためです(元のバイト配列を内部に保存している可能性があります)が、それを処理する方法がわかりません。ただし、すべての文字列が ASCII であるわけではなく、一部の文字は 2 バイトを使用します。
アップデート:
不正なバイトは、文字列に埋め込まれた単純な null バイトであることが判明しました。ただし、末尾の null バイトをすべて単純に削除することはできませんが、文字列の長さもわかりません。各文字が n バイトで格納されている文字列から null バイトを削除するにはどうすればよいですか?