rtf文件的编码
Encoding of rtf file
我得到一个代表 rtf-file.
的 base64 编码字符串
如果我查看原始文本表示(在 base64 编码之前),我会看到字符序列 F¸r
。当在查看器中显示时,这应该代表 Für
。 rtf-file 的 header 包含 ansicpg1252
因此这应该是编码,除非另有更改(转义序列,字体定义,..)。
我现在的问题是我无法将 base 64 字符串正确解码为其原始表示形式。我再也没有得到 F¸r
了。相反,我有 Für
甚至 F\'fcr
。因此,在查看器中显示解码后的 rtf 时,变音符号的表示是错误的。
那么rtf-file的原始编码是什么?或者这里出了什么问题?
你可以查看示例文件 here. This 是我得到的 base 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
出现错误(草图:不支持编码名称,实际项目:数组不为空)。
您的问题不是文件的编码问题。如果您 运行 您的代码并比较结果,每个结果中的文本都是相同的。
您的问题是源文件是 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);
我得到一个代表 rtf-file.
的 base64 编码字符串如果我查看原始文本表示(在 base64 编码之前),我会看到字符序列 F¸r
。当在查看器中显示时,这应该代表 Für
。 rtf-file 的 header 包含 ansicpg1252
因此这应该是编码,除非另有更改(转义序列,字体定义,..)。
我现在的问题是我无法将 base 64 字符串正确解码为其原始表示形式。我再也没有得到 F¸r
了。相反,我有 Für
甚至 F\'fcr
。因此,在查看器中显示解码后的 rtf 时,变音符号的表示是错误的。
那么rtf-file的原始编码是什么?或者这里出了什么问题?
你可以查看示例文件 here. This 是我得到的 base 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
出现错误(草图:不支持编码名称,实际项目:数组不为空)。
您的问题不是文件的编码问题。如果您 运行 您的代码并比较结果,每个结果中的文本都是相同的。
您的问题是源文件是 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);