当前位置: 首页 > 编程语言 > C#

如何将unicode字符串输出为RTF(使用C#)分享

时间:2023-04-10 15:48:27 C#

如何将unicode字符串输出为RTF(使用C#)(使用c#和winforms)来自维基百科:如果需要Unicode转义,请使用控制字u,后跟一个16位带符号十进制整数,给出Unicode代码点编号。为了不支持Unicode的程序的利益,该字符的最接近表示必须跟在指定的代码页中。比如u1576?将给出阿拉伯字母beh,表示不支持Unicode的旧程序应将其呈现为问号。我不知道如何将Unicode字符转换为Unicode代码点(“u1576”)。转换为UTF8、UTF16和类似格式很容易,但我不知道如何转换为代码点。我将使用它的场景:Unicode字符到达时出现的问题如果您提供的所有字符都存在于基本多语言平面中(并且您不太可能需要更多),那么一个简单的UTF-16编码就足够了。维基百科:除了代理代码点U+D800-U+DFFF(不是字符),所有可能的代码点U+0000到U+10FFFF都由UTF-16唯一映射,无论代码点的当前或未来的角色分配如何或使用。以下示例程序说明了您要执行的操作:staticvoidMain(string[]args){//?char[]ca=Encoding.Unicode.GetChars(newbyte[]{0xeb,0x00});varsw=newStreamWriter(@"c:/helloworld.rtf");sw.WriteLine(@"{rtf{fonttbl{f0TimesNewRoman;}}f0fs60H"+GetRtfUnicodeEscapedString(newString(ca))+@"llo,World!}");sw.Close();}staticstringGetRtfUnicodeEscapedString(strings){varsb=newStringBuilder();foreach(varcins){if(cimportantisConvert.ToUInt32(c),它基本上返回相关字符的代码点值。Unicode的RTF转义需要十进制unicode值。根据MSDN文档,System.Text.Encoding.UnicodeencodingcorrespondstoUTF-16.Fixedcodefromacceptedanswer-添加特殊字符转义,如本链接所述staticstringGetRtfUnicodeEscapedString(strings){varsb=newStringBuilder();foreach(varcins){if(c=='\'||c=='{'||c=='}')sb.Append(@""+c);elseif(c你必须将字符串转换为一个byte[]数组(使用Encoding.Unicode.GetBytes(string)),然后遍历该数组并将和u字符添加到您找到的所有Unicode字符中。然后当您将数组转换回字符串时,您必须保留Unicode字符作为数字。例如,如果您的数组如下所示:byte[]unicodeData=newbyte[]{0x15,0x76};它会变成://5c=,75=ubyte[]unicodeData=newbyte[]{0x5c,0x75,0x15,0x76};根据规范,这里有一些经过测试和工作的Java代码:publicstaticStringescape(Strings){if(s==null)returns;intlen=s.length();StringBuildersb=newStringBuilder(len);for(inti=0;i=0x20&&c=0x80&&c重要的是您需要在转义解码后附加2个字符(接近unicode字符或只使用?)...因为unicode需要2个字节。还有spec说如果代码点大于32767你应该使用负值,但是在我的测试中你不使用负值也没关系。这里是spec:uN这个关键字表示单个Unicode字符对于没有基于当前ANSI代码页的等效ANSI表示。N表示以十进制数表示的Unicode字符值。此关键字后紧跟ANSI表示中的等效字符。这样,uN将被较旧的忽略readers关键字并正确选择ANSI表示。当遇到此关键字时,读者应忽略接下来的N个字符,其中N对应于遇到的最后一个ucN值。与所有RTF关键字一样,可能有一个关键字终止空格(在ANSI字符),空格不计为要跳过的字符。虽然这不太可能发生(或推荐),但bin关键字、它的参数和随后的二进制数据被认为是一个用于跳过目的的字符。如果在扫描可跳过数据时遇到RTF范围定界符(即左括号或右括号),则认为可跳过数据在定界符之前结束。这允许读者执行一些基本的错误恢复。要在可跳过的数据中包含RTF分隔符,它们必须使用适当的控制符号(即用反斜杠转义)表示,就像在纯文本中一样。出于计算可跳过字符的目的,任何RTF控制字或符号都被视为单个字符。当RTF编写器遇到没有对应ANSI字符的Unicode字符时,它应该输出uN后跟它可以管理的最佳ANSI表示形式。此外,如果一个Unicode字符被转换为字节数与当前Unicode字符字节数不同的ANSI字符流,则应在uN关键字之前发布ucN关键字以通知读者更改。RTF控制字通常接受带符号的16位数字作为参数。所以大于32767的Unicode值必须表示为负数以上就是C#学习教程的全部内容:如何将unicode字符串输出为RTF(使用C#),如果对大家有用还需要了解更多关于C#学习教程,希望大家多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: