特殊字符(例如 À,Ë)转换为问号 (?),针对正则表达式的验证问题



我也看过类似的帖子,但都没有解决我的问题。

当我提供特殊字符从UI属性(e。g First Name = Àvengers15),它反过来根据Regex模式进行验证

*******
([a-zA-Z0-9 +-.'/\&-\u00a2\u00c0\u00c1\u00c2\u00c3\u00c4\u00c5\u00c6\u00c7\u00c8\u00c9\u00ca\u00cb\u00cc\u00cd\u00ce\u00cf\u00d0\u00d1\u00d2\u00d3\u00d4\u00d5\u00d6\u00d8\u00d9\u00da\u00db\u00dc\u00dd\u00de\u00df\u00e0\u00e1\u00e2\u00e3\u00e4\u00e5\u00e6\u00e7\u00e8\u00e9\u00ea\u00eb\u00ec\u00ed\u00ee\u00ef\u00f0\u00f1\u00f2\u00f3\u00f4\u00f5\u00f6\u00f8\u00f9\u00fa\u00fb\u00fc\u00fd\u00fe\u00ff\u0100\u0101\u0102\u0103\u0104\u0105\u0106\u0107\u0108\u0109\u010a\u010b\u010c\u010d\u010e\u010f\u0110\u0111\u0112\u0113\u0114\u0115\u0116\u0117\u0118\u0119\u011a\u011b\u011c\u011d\u011e\u011f\u0120\u0121\u0122\u0123\u0124\u0125\u0126\u0127\u0128\u0129\u012a\u012b\u012c\u012d\u012e\u012f\u0130\u0131\u0132\u0133\u0134\u0135\u0136\u0137\u0138\u0139\u013a\u013b\u013c\u013d\u013e\u013f\u0140\u0141\u0142\u0143\u0144\u0145\u0146\u0147\u0148\u014a\u014b\u014c\u014d\u014e\u014f\u0150\u0151\u0152\u0153\u0154\u0155\u0156\u0157\u0158\u0159\u015a\u015b\u015c\u015d\u015e\u015f\u0160\u0161\u0162\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016a\u016b\u016c\u016d\u016e\u016f\u0170\u0171\u0172\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017a\u017b\u017c\u017d\u017e\u0218\u0219\u021a\u021b]{1,60}) 
******

在Groovy代码中,在反应。JSON我得到-first_name:?vengers15它可以很好地验证使用

的模式
*****
pattern.matcher(val);
boolean valid =  matcher.matches()
valid = true
*****

我猜是因为

*****
<meta charset="UTF-8">
*****

在UI框架上被处理。

但是当我直接通过SOAPUI访问具有相同数据的API时,提供与UI相同数据的JSON有效负载,例如"first_name": "Àvengers15". 我得到了相同的响应。如上所述,first_name:?vengers15但是对RegEx模式

的验证失败
*****
pattern.matcher(val);
boolean valid =  matcher.matches()
valid = false
*****

我尝试处理UTF-8,认为这可能是我的Groovy服务类中的一个问题,但不工作。

*****
byte[] ptext = attrValue.getBytes();
String valueAfterUtf = new String(ptext, "UTF-8");
*****

也,尝试设置'Content-Type', 'application/json;charset=UTF-8',报头无效。

1. Why am I getting question mark , if UTF-8 has been handled in case of UI.
2. Why validation is failing through SOAPUI.

任何帮助都将非常感激。由于

首先,您需要区分"字符"字形:基本上,字形是字符的图形表示,如果当前字体不包含当前字符的字形(图形表示),系统将为您提供替换字形。

所以首先你需要检查你看到的问号是问号还是当前字体对未知字符的替代字形。

接下来,您需要检查正在使用的代码集:虽然Unicode及其编码能够表示任何已定义的字符,但还有其他编码只知道子集。现在,当您将字符串从一种代码集转换为另一种代码集时,未知字符将被替换——通常由问号替换——或者您会得到某种错误。

所以为了验证你的字符串的内容是什么,你应该显示字符的十六进制值,而不是仅仅使用System.out.println()

最新更新