2

我们有一个用 .NET 4.0 编写的网站和 WinForms 应用程序,允许用户输入任何 Unicode 字符(相当标准)。

问题是我们的少量数据被提交到旧的大型机应用程序。在我们进行测试时,一位用户输入了一个带有字符的名称,最终导致大型机程序崩溃。名字是BOËNS。不支持 E。

检测 EBCDIC 是否支持 unicode char 的最佳方法是什么?

我尝试使用以下正则表达式,但这限制了一些适用于大型机的标准特殊字符(/、_、:)。

我宁愿使用一种方法来验证每个字符,或者使用您刚刚在字符串中传递的方法,如果 EBCDIC 不支持的字符包含在字符串中,它返回 true 或 false。

4

2 回答 2

1

首先,您必须为 EBCDIC获取正确的Encoding 实例,调用将代码页 ID 作为参数的静态GetEncoding方法。

一旦你有了它,你可以将属性设置DecoderFallbackclass上的静态ExceptionFallback属性DecoderFallback中的值。

然后,在您的代码中,您将遍历字符串中的每个字符并调用该GetBytes方法将字符编码为字节序列。如果无法编码,则DecoderFallbackException抛出 a;您只需将每个调用包装GetBytes在一个try/catch块中即可确定哪个字符出错。

注意,如果你想知道失败的角色的位置,以上是必需的。如果您不关心字符的位置,只要字符串不会作为一个整体进行编码,那么您可以调用GetBytes带有字符串参数的方法,如果DecoderFallbackException无法编码的字符是遭遇。

于 2011-02-24T19:47:53.167 回答
0
于 2011-02-24T19:41:30.297 回答