rtf文件的编码

本文关键字:编码 文件 rtf | 更新日期: 2023-09-27 18:03:16

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

如果我查看原始文本表示(在base64编码之前),我看到字符序列F¸r。在查看器中显示时,它应该代表Für。rtf文件的头包含ansicpg1252,所以这应该是编码,除非另有更改(转义序列,字体定义,…)。

我现在的问题是,我不能正确解码基本64字符串到其原始表示。我再也得不到F¸r了。相反,我有Für甚至F''fcr。通过这种方式,在查看器中显示解码后的rtf时,变音符的表示是错误的。

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

您可以在这里查看示例文件。这是我得到的64进制编码字符串。

编辑:

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

string path = "/some/path/ltxt1 Kopie.rtf";
byte[] document = File.ReadAllBytes(path);
string base64string = Convert.ToBase64String(document);
var isoBytes = Convert.FromBase64String(base64string);
File.WriteAllText ("/some/path/sketch.rtf", System.Text.Encoding.GetEncoding("iso-8859-1").GetString(isoBytes));

我试图改变编码,但与windows-1252我得到一个错误(草图:编码名称不支持,实际项目:数组不为空)。

rtf文件的编码

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

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

最简单的方法是确保使用匹配的编码将其写回磁盘:

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

或者更简单:

File.WriteAllBytes("/some/path/sketch.rtf", isoBytes);