2007-02-15, 04:52
|
#1 |
| 纯洁善良的小男生
 会员编号: 147244  注册日期: 07-01  住址: 广州  帖子: 135  精华: 0  资产: 12290 彩风币  声望:  | | 如图 最后发表 那 帖子最后一个字经常显示为乱码
之前我开发个JSP项目也试过,PHP的不懂不过我想原因应该也差不多
下面我用上次解决该问题的方案来描述下解决方法:
问题描述:最后一个字经常为乱码
问题原因:为了限制内容长度而截取内容的前一部分用于显示,而中文较大,英文较小,如果用CHAR来截取长度,中文显然要比英文长很多,因此当时我用BYTE来截取,但是中文占2byte,因而取的最后一个字节很可能是该中文的第一个字节,丢失了第2个字节从而显示乱码。
解决思路:想办法确定取的最后一字节是不是中文的后一个字节,如果是就取少一个字节,或者取多一个字节。
测试程序:(假设我现在想取15位字节)
public class Testt {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String title = "天气很好a,出了太阳.";
String errorTitle = new String ( title.getBytes() , 0 , 15);
String shortTitle = getShortTitle(title);
System.out.println(errorTitle);
System.out.println(shortTitle);
}
public static String getShortTitle (String title)
{
byte[] b = title.getBytes();
String shortTitle1 = new String (b , 0 , 15);//按正常取
String shortTitle2 = new String (b , 0 , 16);//取多一个字节
if (shortTitle1.length() == shortTitle2.length())
//如果正常和取多一个字节所得到的字符数相同,则可以肯定取的最后一个字节为某双字符的前一字节
return new String (b , 0 , 14);//取少一个字节,把14改16取多一字节也行
else
return new String (b , 0 , 15);
//若字符数不相同,则可以肯定最后一字节为单字节字符,或是双字节字符的后一字节
}
} | |
| |