JavaScript中非Ascii字符的计数字符串计数

JavaScript中非Ascii字符的计数字符串计数,javascript,string,Javascript,String,我想为计数字符添加客户端验证。数据库中的字段限制为300。在服务器端验证时,我得到了正确的字符串长度,但在将表单保存为草稿时,服务器端验证被绕过 所以我得到了一个例外。有人能帮忙检查拉丁字符的长度吗 £, §, £, Ä 例如: String s= "wa£erw£"; System.out.println("SiZE "+s.length()); System.out.println("UTF - SiZE "+s.getBytes(java.nio.charset.StandardCh

我想为计数字符添加客户端验证。数据库中的字段限制为300。在服务器端验证时,我得到了正确的字符串长度,但在将表单保存为草稿时,服务器端验证被绕过

所以我得到了一个例外。有人能帮忙检查拉丁字符的长度吗

£, §, £, Ä
例如:

String s= "wa£erw£";

System.out.println("SiZE "+s.length());

System.out.println("UTF - SiZE "+s.getBytes(java.nio.charset.StandardCharsets.UTF_8).length );
输出:

SiZE 7
UTF - SiZE 9

我需要使用JavaScript计算9,让我们清除一些东西-字符串“wa.erw”:

  • 包含7个字符

  • 在UTF-8中有9个字节,这是因为其中有2个多字节字符-这2个字符各为2个字节,总计为9个字节

在JavaScript中,
.length()
返回字符数,因此第一个结果是正确的。参考:

s.getBytes(java.nio.charset.StandardCharsets.UTF_8).length
-这将首先将字符串转换为字节数组,然后返回此字节数组的长度。如上所述,字节数组将为9个字节。所以第二个也是正确的

如果您想获得JS中的字节数,就不那么容易了。您可以在本讨论中找到某种解决方案:


更好的方法是在数据库中正确地存储字符串数据,整个应用程序使用相同的编码(例如在DB中使用UTF-8)。然后,您将摆脱重新编码文本的所有开销,以及类似于此的验证问题等。如果您的DB列与其他应用程序不同,您也可能会出现错误的编码问题。

我们无法调试您未显示的代码us@JamesThorpe它是我存储为UTF-8字符串的数据库中的字符计数