1

我有一个用 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();
            }
4

2 回答 2

0

您的 PGP 解密工具似乎将文件解释为 UTF-8 编码。所以尝试将文件写入UTF-8编码

于 2012-11-28T15:20:53.803 回答
0

编辑:实际上,用 BOM 写入文件对我来说更有意义sw.Write,但 PGP 解密可能不会,所以如果你用记事本打开,当没有 BOM 时默认为 Windows-1252?如果是这种情况,您可以尝试使用 C# 读取解密文件,并在打开文件时将编码指定为 UTF8。

我发现的Ã字符通常来自Encoding.GetEncoding(1252)被解释为 UTF8 的 Windows-1252,反之亦然。一些较旧的程序将默认使用它,或者来自网络资源,因此问题可能比您的 PGP 加密更严重。

尝试将文件写为 Windows-1252(也许 PGP 实际上默认为 Windows 上的那个),或者确保当你写出文件时它有一个UTF8的BOM

于 2012-11-28T16:42:07.600 回答