JAva(16)--中国語と英語を混合し、一定の長さを切り取り、文字化けしないようにする

3327 ワード

中国語は2バイトなので、メールの文字数など、一定の文字長を切り取る必要がある場合は、文字化けしないことを保証する必要があります.
import java.io.UnsupportedEncodingException;

public class Demo {

    /** * gb2312 gbk    * gb2312          ascii   ascii       (  )        (    ) *   gbk        ,     :                     * @throws UnsupportedEncodingException */
    public static void main(String[] args) throws UnsupportedEncodingException {
String str = "abc   ";

        byte[] buf = str.getBytes("gbk");   // ctrl+2,L

        //         ,         
        //decode(buf,8);

        decodeByGBK(buf, 6);
    }
    private static void decodeByGBK(byte[] buf, int len) {
        // gbk   
        boolean b = false;      // b true
        for(int i=0; i<len; i++) {
            if(b)
                b = false;
            else if(buf[i]<0)
                b = true;
        }
        if(b)
            len--;
        String str = new String(buf, 0, len);
        System.out.println(str);
    }

    private static void decode(byte[] buf, int len) {
        //        
        int count = 0;
        for(int i=0; i<len; i++) {
            if(buf[i]<0)
                count++;
        }
        if(count%2==1)
            len--;

        String str = new String(buf, 0, len);
        System.out.println(str);
    }
}