.NET:如何判断编码是否支持字符串中的所有字符?
我有很多需要输出的文本,其中包括来自多种语言的各种字符。 有时我需要输出除Unicode之外的字符编码(例如,Shift-JIS或ISO-8859-2)的文本,以匹配它将要访问的页面。
如果文本具有编码无法处理的字符(例如,ISO-8859-2编码输出中的日文字符),则输出结果中出现奇数字符。 我可以逃避他们,但我宁愿这样做只有在真的有必要的时候。
所以,我的问题是:如果编码可以处理我的字符串中的所有字符,是否有一种方法可以提前告诉我?
编辑:我认为EncoderFallback可能是我问的问题的正确答案。 不幸的是,它似乎并不适合我的特殊情况。 我的想法是将字符转换为它们的HTML实体等价物(例如,モ而不是モ)。 但是,编码器只转换它找到的第一个这样的字符,如果我设置了Response.ContentEncoding,它根本就不会调用我的EncoderFallback。
您可以编写自己的EncoderFallback类,在编码之前将其分配给编码器。
使用这种方法,您无需在高级中执行任何操作(可能只是处理输出字符串以查找问题)。
相反,您的Fallback类只需要处理编码没有字符值的替换。
尝试使用EncoderFallback设置为EncoderExceptionFallback的Encoding对字符串进行编码。 例如。:
Encoding e= Encoding.GetEncoding(932, new EncoderExceptionFallback(), new DecoderExceptionFallback());
然后在GetBytes()时捕获EncoderFallbackException 。
将其转换为目标编码,将其转换回来并与原始编码进行比较?
尝试使用Encoding.GetBytes()和Encoding.GetStrings()来进行转换。
作为优化,您可以从原始字符串中搜索所有使用过的unicode字符,然后使用它来尝试编码。
我认为这些方法已经有效了。 (EncoderFallback解决方案似乎相当不错。)但是,如果您愿意,可以选择以下方法。
通过调用encoding.GetEncoder()为要测试的编码创建编码器。 然后,您可以调用Encoder对象的Convert方法,传入文本,并查看已完成的 out参数的值以确定它是否成功。
如果速度是一个问题,你可能想要对各种方法进行基准测试,但我怀疑他们都会有非常相似的性能配置文件。
上述就是C#学习教程:.NET:如何判断编码是否支持字符串中的所有字符?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1003914.html