我得到一个base64编码的字符串,它表示rtf文件。
如果我查看原始文本表示(在base64编码之前),就会看到字符序列F¸r。当在查看器中显示时,这应该代表Für。rtf-文件的头包含ansicpg1252,因此这应该是编码,除非其他修改(转义序列、字体定义.)。
我现在的问题是,我无法正确地将基本64字符串解码为它的原始表示形式。我再也找不到F¸r了。相反,我有Für,甚至F\'fcr。通过这一点,在查看器中显示解码的rtf时,umlaut的表示是错误的。
那么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我得到了一个错误(草图:编码名不支持,真正的项目:数组不为空)。
发布于 2015-07-17 10:04:49
您的问题不是文件的编码。如果运行代码并比较结果,则每个文本都是相同的。
您的问题是源文件是ANSI编码的,第二个文件是UTF-8编码的。但是,文本中的RTF指令告诉任何解释RTF的内容,即ANSI编码( 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);https://stackoverflow.com/questions/31472492
复制相似问题