如何检测.NET 4.0中的EBCDIC是否支持Unicode字符?

如何检测.NET 4.0中的EBCDIC是否支持Unicode字符?,unicode,.net-4.0,ebcdic,Unicode,.net 4.0,Ebcdic,我们有一个用.NET4.0编写的网站和WinForms应用程序,允许用户输入任何Unicode字符(相当标准) 问题是我们的一小部分数据被提交到一个旧的大型机应用程序中。当我们进行测试时,一个用户输入了一个名称,其中的字符会导致大型机程序崩溃。名字叫博恩斯。不支持E 检测EBCDIC是否支持unicode字符的最佳方法是什么 我尝试使用以下正则表达式,但这限制了一些标准的特殊字符(/,,:),这些字符适合大型机 我更喜欢使用一种方法来验证每个字符,或者使用一种方法,您只需在字符串中传递一个方法,

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

问题是我们的一小部分数据被提交到一个旧的大型机应用程序中。当我们进行测试时,一个用户输入了一个名称,其中的字符会导致大型机程序崩溃。名字叫博恩斯。不支持E

检测EBCDIC是否支持unicode字符的最佳方法是什么

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


我更喜欢使用一种方法来验证每个字符,或者使用一种方法,您只需在字符串中传递一个方法,如果strig中包含EBCDIC不支持的字符,则返回true或false。

您可以使用
\
对Regex中的字符进行转义。所以如果你想匹配一个点,你可以做
@“\。
。要匹配
/.\u,:[]-
例如:
@“[/.\u,:\-\[\]]
。现在,EBDIC是8位,但许多字符是控制字符。您有“有效”字符列表吗

我制作了这个图案:

string pattern = @"[^a-zA-Z0-9 ¢.<(+&!$*);¬/|,%_>?`:#@'=~{}\-\\" + '"' + "]";

m1
false
(这是所有“好”字符的列表),
m2
true
(在另一个列表中,我添加了
符号)

首先,您必须获得EBCDIC的正确值,调用static,它将代码页id作为参数

一旦获得该值,就可以将设置为中的值

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


注意,如果您想知道失败字符的位置,则需要执行上述操作。如果您不关心字符的位置,只要字符串不会作为一个整体进行编码,那么您就可以调用,如果遇到无法编码的字符,它将抛出相同的
DecoderFallbackException

Ok…现在是简单的一个…EBCDIC的编码实例在哪里?EBCDIC没有.NET编码实例。@Jim Mischel@xanatos:没有,没有,EBCDIC是一个代码页。这就是我链接到以代码页为参数的
GetEncoding
方法的原因(这里有一个代码页列表,其中包含超过30个EBCDIC代码页的代码页ID)。对不起,那个评论是针对xanatos的。我应该包括一个关于获取代码页编码的澄清(或重复)。
Regex rx = new Regex(pattern);
bool m1 = rx.IsMatch(@"a-zA-Z0-9 ¢.<(+&!$*);¬/|,%_>?`:#@'=~{}\-\\" + '"');
bool m2 = rx.IsMatch(@"€a-zA-Z0-9 ¢.<(+&!$*);¬/|,%_>?`:#@'=~{}\-\\" + '"');