用utf8字符替换内部字符串后无法写入rtf文件

时间:2013-02-22 20:28:03

标签: c# rtf

我有一个rtf文件,我必须用一些特定于语言的字符(UTF8)进行一些文本替换。在替换之后,我尝试保存到新的rtf文件,但是字符没有设置正确(奇怪的字符)或文件与所有rtf原始代码和所有格式保存。 这是我的代码:

var fs = new FileStream(@"F:\projects\projects\RtfEditor\Test.rtf", FileMode.Open, FileAccess.Read);
//reads the file in a byte[]
var sb = FileWorker.ReadToEnd(fs);
var enc = Encoding.GetEncoding(1250);
//var enc = Encoding.UTF8;
var sbs = enc.GetString(sb);
var sbsNew = sbs.Replace("#test/#", "ă î â șșțț");
//first writting aproach
var fsw = new FileStream(@"F:\projects\projects\RtfEditor\diac.rtf", FileMode.Create, FileAccess.Write);                                     
fsw.Write(enc.GetBytes(sbsNew), 0, enc.GetBytes(sbsNew).Length);
fsw.Flush();
fsw.Close();

在这个方法中,结果文件是正确的,但字符“şşţţ”显示为“????”。

//second writing aproach
using (StreamWriter sw = new StreamWriter(fsw, Encoding.UTF8))
{
    sw.Write(sbsNew);
    sw.Flush();
}

在这个方法中,结果文件是一个rtf文件但是包含所有rtf原始代码和格式,并且特殊字符保存正确(şşţţ显示正确,不再是????)

1 个答案:

答案 0 :(得分:1)

RTF文件只能直接包含7位字符。其他所有东西都需要编码为转义序列。更详细的信息可以在例如this Wikipedia article