这是对您的另一个问题的回应,看起来它已被删除......这一点仍然存在。
看起来像一个经典的 Unicode 到 ASCII 问题。诀窍是找到它发生的地方。
.NET 与 Unicode 一起工作得很好,假设它被告知它是以 Unicode开头(或保留为默认值)。
我的猜测是您的接收应用程序无法处理它。所以,我可能会将ASCIIEncoder 与EncoderReplacementFallback和 String.Empty一起使用:
using System.Text;
string inputString = GetInput();
var encoder = ASCIIEncoding.GetEncoder();
encoder.Fallback = new EncoderReplacementFallback(string.Empty);
byte[] bAsciiString = encoder.GetBytes(inputString);
// Do something with bytes...
// can write to a file as is
File.WriteAllBytes(FILE_NAME, bAsciiString);
// or turn back into a "clean" string
string cleanString = ASCIIEncoding.GetString(bAsciiString);
// since the offending bytes have been removed, can use default encoding as well
Assert.AreEqual(cleanString, Default.GetString(bAsciiString));
当然,在过去,我们只是循环并删除任何大于 127的字符......好吧,至少我们这些在美国的人。;)