你还认为一个中文字节长度是2吗?[align=center][/align]
一般项目中从前台js到后台java、数据库都是统一采用uft-8编码的,一般情况下在数据库中对每个字段都做了长度限制,所以在编写代码的过程中需要对js和java中的参数长度进行校验,否则在数据录入的时候难免会出错。因为js是一种若数据类型语言,没有将字符串直接转换成byte的方法,所以在校验字符byte长度时难免有人会直接将中文或某些特殊字符按2个长度计算,其实这样是不对的,看了下面的规则后可以去试一下。
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,可以表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII相容,使用一至四个字节为每个字符编码。
其编码规则如下:
1.字符代码在000000 – 00007F之间的,用一个字节编码;
2.000080 – 0007FF之间的字符用两个字节;
3.000800 – 00D7FF 和 00E000 – 00FFFF之间的用三个字节,注: Unicode在范围 D800-DFFF 中不存在任何字符;
4.010000 – 10FFFF之间的用4个字节。
而UTF-16 则是定长的字符编码,大部分字符使用两个字节编码,字符代码超出 65535 的使用四个字节,如下:
1.000000 – 00FFFF 两个字节;
2.010000 – 10FFFF 四个字节。
附上js计算byte长度的代码:
/**
*
*/
var sizeof = function(str, charset)
{
var total = 0, charCode, i, len;
charset = charset ? charset.toLowerCase() : '';
if(charset === 'utf-16' || charset === 'utf16')
{
for(i = 0, len = str.length; i < len; i++)
{
charCode = str.charCodeAt(i);
if(charCode <= 0xffff)
{
total += 2;
}
else
{
total += 4;
}
}
}
else
{
for(i = 0, len = str.length; i < len; i++)
{
charCode = str.charCodeAt(i);
if(charCode <= 0x007f)
{
total += 1;
}else if(charCode <= 0x07ff)
{
total += 2;
}
else if(charCode <= 0xffff)
{
total += 3;
}else
{
total += 4;
}
}
}
return total;
}
function test()
{
alert("byte size==" + sizeof("test字符长度【】"))
}
测试结果: byte size==22
再用java测试一下:
public static void main(String[] args) {
String str = "test字符长度【】";
byte[] bts = null;
try {
bts = str.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("byte size ==" + bts.length);
}
}
测试结果:byte size ==22
证明这是一致的吧,不死心的话再看看在什么情况下中文是2个字节;
public static void main(String[] args) {
String str = "test字符长度【】";
byte[] bts = null;
try {
bts = str.getBytes("gb2312");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("byte size ==" + bts.length);
}
}
测试结果:byte size ==16
在数据库中绝对不会以gb2312的编码格式存储字段,所以字符长度计算错误了的话赶紧改吧
分享到:
相关推荐
在标签“源码”和“工具”的上下文中,了解字符串字节长度的计算对于开发涉及数据传输、编码处理或者与不同编码系统交互的工具至关重要。例如,如果你正在构建一个Web应用,需要将用户输入的字符串发送到服务器,...
本文讨论的是如何求中英文混杂字符串的字节长度的问题,并提供了一种使用Javascript语言求中英文混杂字符串字节长度的方法。 字节长度是指字符串占用的字节数量,它是计算机系统中最基本的存储单位。对于中英文混杂...
本文详细介绍了在JavaScript中获取字符串字节数的方法,包括对英文字母和中文字符的处理。 首先,我们通常使用字符串对象的length属性来获取字符串中字符的数量。这个属性会返回字符串的长度,对于英文字符和标点...
字符串是由字符组成的序列,而“字符串按照指定的字节数来截取”这个话题,就是指如何在字符串中提取固定字节数的部分。在不同的编程语言中,都有相应的函数或方法来实现这一功能。 在Python中,可以使用内置的`...
为了解决这个问题,我们可以编写自定义函数来准确地获取字符串的真实长度,并进行截取。 首先,让我们详细了解一下`getStrActualLen`函数。这个函数的目的是得到字符串的实际长度,即考虑了双字节字符的长度。它...
总结来说,以上三种方法都可以用来获取字符串的实际长度,即能正确计算包含中文字符的字符串长度。方法一虽然直观但代码量稍大;方法二通过位运算简化了逻辑判断;而方法三则利用了正则表达式的替换功能,代码最为...
本文详细介绍了如何利用JavaScript来判断字符串的字节数,并根据字节长度进行字符串的截取操作。这包括了判断字符串中的字节数和字符数、限制输入长度、以及如何在JavaScript中动态地处理HTML页面元素的值。接下来,...
### JavaScript 获取字符串字节数的多种方法 在Web开发中,有时我们需要计算字符串的字节数,这在处理用户输入、文件上传限制或与API交互时尤为重要。在JavaScript中,有多种方法可以用来获取字符串的字节数。下面...
在处理含有中文字符的字符串长度计算时,由于中文字符通常占用的字节数多于英文字符,我们需要采用特殊的处理方法来确保长度计算的准确性。在传统的编程实践中,尤其是在使用JavaScript这样的编程语言时,一个简单的...
方法一: 代码如下:function byteLength(str) { var byteLen = 0, len = str.length;...JS获取字符串实际长度! 今天又添加一个小东西!一个程序员经常要用到的字符串长度检测方法,由于JS原先的长
js 将多出的字符串用省略号代替 不是一般的那样获取字符串长度和字符字节来判断哦 ^_^ ;基本思路 ;很简单
下面我们将详细讨论如何实现JavaScript获取中英文混合字符串长度的方法,并通过实例来解释。 首先,我们可以编写一个名为`StrLen`的函数,该函数接受一个字符串作为参数,然后逐个字符地检查字符串中的每个字符的...
例如,前端可以通过JavaScript获取图片的Blob对象,然后使用`FileReader`的`readAsArrayBuffer`方法将Blob转换为字节数组,再调用`base64BinArrayToStr`函数将其转换为Base64字符串,这个字符串可以发送到服务器。...
`substring`用于获取字符串的子串,`charAt`用于获取指定位置的字符,`length`用于获取字符串的长度。 知识点七:字符串编码处理 在实际应用中,处理字符串时需要考虑编码方式,因为不同的编码方式中字符所占的字节...
由于JavaScript中字符串的length属性是按照字节来计算的,对于ASCII字符集(0x00到0xff)中的字符来说,一个字符通常占用一个字节的长度。然而,对于中文、日文、韩文等使用双字节或多字节字符集的语言,使用length...
在JavaScript中,对`textarea`元素进行输入字符串长度限制是一个常见的需求,特别是在处理用户输入时,需要确保数据格式的正确性。在HTML中,`textarea`控件不像`input[type="text"]`那样可以直接通过`maxlength`...
本文将详细介绍一个JavaScript字符串操作集合,包括但不限于小数点处理、空格处理、数据类型校验、过滤特殊字符以及URL参数获取等功能。 #### 一、空格处理 在实际应用中,去除字符串前后的空格是非常常见的需求,...
由于JavaScript的字符串长度计算是以单个字符为单位,不区分字符编码,因此需要特别的函数来计算以GBK或UTF8编码的中文字符串的“实际长度”。 GBK字符集通常用于简体中文版的Windows系统和一些中文数据库。GBK编码...