我有一个使用ascii编码用C#编写的文本文件,当我尝试使用java项目读取文件时,我在文件的开头有一个ZERO WIDTH NO-BREAK SPACE字符。有没有人遇到过这种情况?
private static void SavePrivateKey(object key)
{
if (logger.IsInfoEnabled) logger.Info("SavePrivateKey - Begin");
string privatekey = (string)key;
string strDirName = Utility.RCTaskDirectory;
string strFileName = "PrivateKey.PPK";
string strKeyPathandName = Path.Combine(strDirName, strFileName);
//if (File.Exists(strKeyPathandName))
//{
// File.Create(strKeyPathandName);
//}
if (!string.IsNullOrEmpty(privatekey))
{//Save private key file
if (!Directory.Exists(strDirName))
Directory.CreateDirectory(strDirName);
FileStream fileStream = new FileStream(strKeyPathandName, FileMode.OpenOrCreate);
//TODO: Save File as ASCII
using (StreamWriter sw = new StreamWriter(fileStream, Encoding.ASCII))
{
if (logger.IsDebugEnabled) logger.DebugFormat("Saving the private key to {0}.", strKeyPathandName);
sw.Write(privatekey);
sw.Close();
if (logger.IsDebugEnabled) logger.DebugFormat("Saved private key to {0}.", strKeyPathandName);
}
}
if (logger.IsInfoEnabled) logger.Info("SavePrivateKey() - End");
}
答案 0 :(得分:4)
看起来文本是用BOM编写的,通常在编写Unicode文件时完成...这个特定字符是UTF16文件的BOM,因此C#中必须有一些东西将此文件写为UTF16 ..
答案 1 :(得分:2)
正如其他人所说,几乎可以肯定是Unicode Byte Order Mark。如果您查看文件中的实际字节(而不是字符),您可以判断使用哪种编码来编写文件:
UTF-8 -> EF BB BF
UTF-16 BE -> FE FF
UTF-16 LE -> FF FE
答案 2 :(得分:1)
是的,这很正常,请参阅Wikipedia。它是一个可选字符,你应该处理它。因此,很可能您没有正确地将文件写为ASCII,因为只有在文件被编码为unicode时才会出现BOM。
答案 3 :(得分:0)
这是一个Byte Order Mark,表示它是一个UTF-16编码的文本文件。
显然它不是用真正的ASCII编写文件,可能你的代码只是复制字节,事件虽然它们在ASCII范围之外。你可以发布你的代码吗?