我有机会使用不同的语言环境,最近遇到了字符串验证问题。在很多情况下,我从翻译团队获得的字符串与我们从网站上获得的字符串在某种程度上有所不同,即使它们看起来相同。
例如:
import org.apache.commons.codec.binary.StringUtils;
@Test
public void test() {
String actual = "pouze v angličtině.";
String expected = "pouze v angličtině.";
byte[] bytesactual = StringUtils.getBytesUtf8(actual);
byte[] bytesexpected = StringUtils.getBytesUtf8(expected);
System.out.println(Arrays.toString(bytesactual));
System.out.println(Arrays.toString(bytesexpected));
Assert.assertEquals(bytesactual, bytesexpected);
}
测试失败,结果:
[112, 111, 117, 122, 101, 32, 118, -62, -96, 97, 110, 103, 108, 105, -60, -115, 116, 105, 110, -60, -101, 46]
[112, 111, 117, 122, 101, 32, 118, 32, 97, 110, 103, 108, 105, -60, -115, 116, 105, 110, -60, -101, 46]
测试永不通过,因为在“ v”后面有几个不同的字符。前端人员读取的json与我在测试中读取的json相同,但是字符以某种方式变得格式错误。当前,我的解决方法是打开json并复制/粘贴从网站上获取的内容并替换它,但是由于这种情况发生了很多次,因此我正在寻找针对此问题的编程解决方案,而不是替换json字符串。有任何想法吗?谢谢。
我会说这很可能是由于字符编码,我会仔细检查前端的字符编码是否符合预期,如果您继续以编程方式进行此操作,则可以强制执行自己的编码规则集。
作为一般规则,任何希望在Ascii标准表之间添加字符的字符集都会引入0-127(ascii)范围之外的任何内容。