Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET:如何判断编码是否支持字符串中的所有字符?_C#_.net_Text_Encoding_Character Encoding - Fatal编程技术网

C# .NET:如何判断编码是否支持字符串中的所有字符?

C# .NET:如何判断编码是否支持字符串中的所有字符?,c#,.net,text,encoding,character-encoding,C#,.net,Text,Encoding,Character Encoding,我有很多文本需要输出,其中包括来自多种语言的各种字符。有时我需要以Unicode以外的字符编码输出文本(例如,Shift JIS或ISO-8859-2),以便匹配它要显示的页面 如果文本包含编码无法处理的字符(例如,ISO-8859-2编码输出中的日语字符),则输出中会出现奇数字符。我可以逃离他们,但我宁愿只有在真正必要的时候才这么做 所以,我的问题是:是否有一种方法可以提前判断编码是否可以处理字符串中的所有字符 编辑: 我认为编码器反馈可能是我所问问题的正确答案。不幸的是,在我的特殊情况下,它

我有很多文本需要输出,其中包括来自多种语言的各种字符。有时我需要以Unicode以外的字符编码输出文本(例如,Shift JIS或ISO-8859-2),以便匹配它要显示的页面

如果文本包含编码无法处理的字符(例如,ISO-8859-2编码输出中的日语字符),则输出中会出现奇数字符。我可以逃离他们,但我宁愿只有在真正必要的时候才这么做

所以,我的问题是:是否有一种方法可以提前判断编码是否可以处理字符串中的所有字符

编辑:
我认为编码器反馈可能是我所问问题的正确答案。不幸的是,在我的特殊情况下,它似乎不起作用。我的想法是将字符转换为它们的HTML实体等价物(例如,モ;而不是モ). 但是,编码器只转换它找到的第一个这样的字符,如果我设置Response.ContentEncoding,它根本不会调用我的encoderCallback。

将其转换为目标编码,将其转换回并与原始编码进行比较

尝试Encoding.GetBytes()和Encoding.GetStrings()进行转换


作为一种优化,您可以从原始字符串中搜索所有使用的unicode字符,并仅使用该字符来尝试编码。

您可以编写自己的EncoderCallback类,在编码之前将其分配给编码器

使用这种方法,您不需要在advanced中执行任何操作(可能只是处理输出字符串以查找问题)


相反,您的回退类只需要处理编码没有字符值的替换。

尝试使用设置为的编码对字符串进行编码。例如:


然后在获取bytes()时捕获。

我认为这些方法已经可以工作了。(EncoderCallback解决方案似乎很不错。)不过,如果您愿意,这里有一个替代方案

通过调用encoding.GetEncoder()为要测试的编码创建编码器。 然后,您可以调用编码器对象的Convert方法,传入文本,并查看完成的out参数的值,以确定它是否成功


如果速度是一个问题,您可能希望对各种方法进行基准测试,但我怀疑它们的性能都非常相似。

谢谢您,为我节省了一点时间:)
Encoding e= Encoding.GetEncoding(932, new EncoderExceptionFallback(), new DecoderExceptionFallback());