C# rtf文件的编码

C# rtf文件的编码,c#,encoding,character-encoding,base64,rtf,C#,Encoding,Character Encoding,Base64,Rtf,我得到一个base64编码的字符串,它表示一个rtf文件 如果我查看原始文本表示(在base64编码之前),我会看到字符序列F¸r。当在查看器中显示时,它应该代表Für。rtf文件的头包含ansicpg1252,因此这应该是编码,除非另有更改(转义序列、字体定义等) 我现在的问题是,我无法正确地将基64字符串解码为其原始表示形式。我再也得不到F¸r了。相反,我有Für甚至F\fcr。因此,当在查看器中显示解码的rtf时,umlaut的表示是错误的 那么rtf文件的原始编码是什么呢?或者这里出了什

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

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

我现在的问题是,我无法正确地将基64字符串解码为其原始表示形式。我再也得不到F¸r了。相反,我有
Für
甚至
F\fcr
。因此,当在查看器中显示解码的rtf时,umlaut的表示是错误的

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

您可以查看示例文件。是我得到的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);

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

您的问题是源文件是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);

你能添加你用来编码和解码内容的代码吗?我从一个Web服务获取内容,但我无法获取编码的代码。我被告知应该使用
iso-8859-1
进行编码。至少我可以访问原始文件。我用我所拥有的更新了我的问题。你能添加你用来编码和解码内容的代码吗?我从Web服务获取内容,但我无法获取编码的代码。我被告知应该使用
iso-8859-1
进行编码。至少我可以访问原始文件。我用我的问题更新了我的问题。看来你是对的。对于文件输出,它正在工作。最初,我想将其导入。如果使用
NSData.FromArray(isoBytes)
执行此操作,则会得到完全错误的结果。所以我必须转换它?但是为了什么?如果我选择另一种编码,我会再次遇到问题。源编码是“Windows-1252”?我认为这在我的环境(Mac上的Xamarin.iOS)中不受支持。您想在
NSData
中如何处理它?目标是什么?您可以转换为UTF8放入其中,然后在需要时转换回。我使用
NSData
临时存储数据,然后在
UIWebView
中表示数据。我想我需要知道它以前是哪种编码,我必须记住它。什么是源编码
Windows-1252
ISO-8859-1
?可能存在不匹配,因为
documentData
现在在UTF8中。文档中似乎没有任何内容表明它必须是UTF8,它只是一个缓冲区。你不能只使用
NSData.FromArray(isoBytes)
而不进行转换吗?字符串转换似乎将采用UTF8,因此为了正确地获取它,我认为你应该执行类似
iso.GetString(documentData.ToArray())
的操作。看来你是对的。对于文件输出,它正在工作。最初,我想将其导入。如果使用
NSData.FromArray(isoBytes)
执行此操作,则会得到完全错误的结果。所以我必须转换它?但是为了什么?如果我选择另一种编码,我会再次遇到问题。源编码是“Windows-1252”?我认为这在我的环境(Mac上的Xamarin.iOS)中不受支持。您想在
NSData
中如何处理它?目标是什么?您可以转换为UTF8放入其中,然后在需要时转换回。我使用
NSData
临时存储数据,然后在
UIWebView
中表示数据。我想我需要知道它以前是哪种编码,我必须记住它。什么是源编码
Windows-1252
ISO-8859-1
?可能存在不匹配,因为
documentData
现在在UTF8中。文档中似乎没有任何内容表明它必须是UTF8,它只是一个缓冲区。你能不能不用转换就直接使用
NSData.FromArray(isoBytes)
?字符串转换似乎会采用UTF8,所以为了正确返回,我想你应该做一些类似
iso.GetString(documentData.ToArray())