数据库使用的是UTF-8编码,字段定义为varchar2(512)
当向该字段插入170多个汉字时,数据库报'插入超长'
Google到时因为java内用的是unicode码,转换为表中的UTF-8后的字节数发生改变。
请问各位有什么高招能取得unicode字符转换为UTF-8后的字节数,这样好判断插入表中的字符串是否超长?
当向该字段插入170多个汉字时,数据库报'插入超长'
Google到时因为java内用的是unicode码,转换为表中的UTF-8后的字节数发生改变。
请问各位有什么高招能取得unicode字符转换为UTF-8后的字节数,这样好判断插入表中的字符串是否超长?
String delimiter) {
String subStr; try {
// unicode转码为utf8
byte[] keywordCodes = keyword.getBytes("utf8");
// utf8转码为unicode
subStr = new String(keywordCodes, 0, maxLength - 1, "utf8"); if (subStr.lastIndexOf(delimiter) < 0) {
// 原字符串中不包含分隔符
return subStr;
} else {
return subStr.substring(0,
subStr.lastIndexOf(delimiter, maxLength));
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
程序的逻辑:关键字字符串以逗号作为分隔符隔开,如果字符串超长则截取到第一个小于最大长度的逗号处。
但是在第一个关键字就超长的情况下,这种那个截取很有可能会得到乱码?请问一楼,这种情况要怎么处理呢??
给定一个包含utf8格式的中日英字符的字符串和一个指定的最大字节数
现要对字符串进行截取,截取后的得到的字符串的字节数最接近指定的最大字节数
且在截取后的字符串中没有乱码
请问这个需要怎么设计呢??
1字节:0xxxxxxx
2字节:110xxxxx 10xxxxxx
3字节:1110xxxx 10xxxxxx 10xxxxxx
4字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节:111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
根据这个规则,我写了个对所有utf8字符串进行截取,且不得到乱码的方法: /**
* 对UTF8编码的字符串按字节数进行截取,且保证截取后的字符串中没有乱码
* @param src 原字符串
* @param maxLength 截取的最大字节数
* @return
*/
public static String intercept(String src,int maxLength) {
String result = null;
try {
byte[] srcBytes = src.getBytes("utf8");
//从截取后的最后一个字节进行判断
int index = maxLength;
//第一个0的位置为2,说明该字节为一个字符编码的一部分
while(getFirstZeroPosition(srcBytes[--index])==2);
result = new String(srcBytes,0,index,"utf8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
/**
* 查找字节中第一个0的位置(从左往右)
* @param src
* @return
*/
public static byte getFirstZeroPosition(byte src) {
byte index = 0;
while(((src<<index++)&0x80)!=0);
return index;
}不管原字符串中包含什么字符,只要是UTF8编码的就都可进行按字节截取,且不会得到乱码!
当然,程序只是初步实现功能!