我有一个使用C#构建的Web应用程序,它根据用户输入信息创建一个txt文件。然后通过命令行工具将此txt文件转换为应用程序中的PGP。
如果用户输入国际字符,则在解密PGP文件时会更改它们 例如。如果用户输入:“ó”,我在解密PGP后将其转换为“³”。
创建的txt文件中包含正确的字符,但转换回txt时却没有。我想这是一个编码问题,但我不知道该尝试什么。
这就是我的代码:
//Create the text file
using (StreamWriter sw = File.CreateText(filePath + fileName)) //Create text file
{
sw.Write(bodyText); //Add body text to text file.
}
//PGP Encrypt
using (Process cmd = new Process()) //Open the pgp command line tool and start it using the arguments.
{
cmd.StartInfo.WorkingDirectory = "C:\\Program Files\\PGP Corporation\\PGP Command Line\\";
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.FileName = "pgp.exe";
cmd.StartInfo.Arguments = arguments;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardError = true;
cmd.Start();
cmd.WaitForExit();
cmd.Close();
}
答案 0 :(得分:0)
似乎您的PGP解密工具将文件解释为以UTF-8编码。 所以尝试编写UTF-8编码的文件
答案 1 :(得分:0)
编辑:实际上sw.Write
写一个带有BOM的文件更有意义,但是PGP解密可能没有,所以如果你打开记事本会默认为Windows-1252什么时候没有BOM?如果是这种情况,您可以尝试使用C#读取解密文件,并在打开时将编码指定为UTF8。
我发现的Ã
字符通常来自Windows-1252 Encoding.GetEncoding(1252)
被解释为UTF8,反之亦然。一些较旧的程序将默认使用它,或者从Web源使用它,因此问题可能比您的PGP加密更远。
尝试将文件写为Windows-1252(也许PGP实际默认为Windows上的文件),或者确保在写出文件时它有一个BOM用于UTF8