groovy 特殊字符(例如、λ)转换为问号(?),针对RegEx的验证问题

yfwxisqw  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(190)

我已经经历了类似的职位,但它并没有解决我的问题。
当我从UI属性中提供特殊字符时(例如First Name = vengers 15),这反过来又根据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代码中,在response.JSON中,我得到了-first_name:?vengers 15,它使用下面的模式进行了很好的验证


*****

    pattern.matcher(val);
    boolean valid =  matcher.matches()
    valid = true

*****

我猜是因为


*****

    <meta charset="UTF-8">

*****

正在UI框架上处理
但是,当我直接通过SOAPUI使用与上面相同的数据访问API时,为JSON有效负载提供了与UI相同的数据,例如“first_name”:“avengers 15”。我得到了与上面相同的response.JSON,first_name:?vengers 15,但针对RegEx模式的验证失败


*****

    pattern.matcher(val);
    boolean valid =  matcher.matches()
    valid = false

*****

我试着处理UTF-8,以为这可能是我的Groovy服务类中的一个问题,但没有工作。


*****

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

*****

此外,尝试设置“内容类型”、“应用程序/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.

任何帮助将不胜感激。谢谢

vatpfxk5

vatpfxk51#

首先,您需要区分“字符”和“字形”:基本上,字形是字符的图形表示,并且在当前字体不包含当前字符的字形(图形表示)的情况下,系统将向您显示替换字形。
因此,首先您需要检查您看到的问号是问号还是当前字体的未知字符的替换字形。
接下来,您需要检查正在使用的代码集:虽然Unicode和它的编码能够表示任何定义的字符,但也有一些编码只知道字符的子集。2当你现在将一个字符串从一个代码集转换成另一个代码集时,未知的字符将被替换--通常是一个问号--或者你会得到某种错误。
因此,为了验证字符串的内容到底是什么,应该显示字符的十六进制值,而不是仅仅使用System.out.println()

相关问题