rtf文件的编码

tes*_*ing 1 c# base64 encoding rtf character-encoding

我得到一个代表 rtf 文件的 base64 编码字符串。

\n\n

如果我查看原始文本表示(在 Base64 编码之前),我会看到字符序列F\xc2\xb8rF\xc3\xbcr当在查看器中显示时,这应该代表。rtf 文件的标头包含,ansicpg1252因此这应该是编码,除非另有更改(转义序列、字体定义等)。

\n\n

我现在的问题是我无法将 Base 64 字符串正确解码为其原始表示形式。我再也得不到了F\xc2\xb8r。相反,我有F\xc3\xbcr或什至F\\\'fcr。因此,在查看器中显示解码后的 rtf 时,变音符号的表示是错误的。

\n\n

那么rtf文件的原始编码是什么?或者这里出了什么问题?

\n\n

您可以在此处查看示例文件。是我得到的 Base 64 编码字符串。

\n\n

编辑:

\n\n

我没有编码的代码,但我想我可以重建它。这是我的代码:

\n\n
string path = "/some/path/ltxt1 Kopie.rtf";\nbyte[] document = File.ReadAllBytes(path);\nstring base64string = Convert.ToBase64String(document);\nvar isoBytes = Convert.FromBase64String(base64string);\n\nFile.WriteAllText ("/some/path/sketch.rtf", System.Text.Encoding.GetEncoding("iso-8859-1").GetString(isoBytes));\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试更改编码,但windows-1252出现错误(草图:不支持编码名称,实际项目:数组不为空)。

\n

Cha*_*ger 5

您的问题不是文件的编码。如果您运行代码并比较结果,则会发现每个代码中的文本都是相同的。

您的问题是源文件是 ANSI 编码的,而您的第二个文件是 UTF-8 编码的。 然而,文本中的 RTF 指令告诉解释 RTF 的内容是 ANSI 编码的(部分ansicpg1252)。因此,由于不匹配,它的解码变得一团糟。

解决此问题的最简单方法是确保使用匹配的编码将其写回光盘:

var iso = Encoding.GetEncoding("ISO-8859-1");
File.WriteAllText("/some/path/sketch.rtf", iso.GetString(isoBytes), iso);
Run Code Online (Sandbox Code Playgroud)

或者,更简单地说:

File.WriteAllBytes("/some/path/sketch.rtf", isoBytes);
Run Code Online (Sandbox Code Playgroud)