gbk,ucs-2转中文

java 复制代码
/**
 * @author: zhoumo
 * @data: 2024/7/4 14:56
 * @descriptions:
 */
public class MsgUtil {

    public static byte[] msgContentToByte(String msgcontent, int msgformat)  {
        String charset = null;
        if (msgformat==15){
            charset = "GBK";
        } else if (msgformat==8){
            charset = "iso-10646-ucs-2";
        }
        byte[] bytes= new byte[]{};
        if(charset!=null){
            try {
                bytes= msgcontent.getBytes(charset);
            } catch (UnsupportedEncodingException e) {
                throw new IllegalArgumentException("Message can not Format");
            }
        } else {
            bytes= msgcontent.getBytes();
        }

        return  bytes;

    }


    public static String msgContentByteToChinese( byte[] ucs2Numbers , int msgformat)  {

        for (byte b : ucs2Numbers) {
            //System.out.println("---  "+String.valueOf(b));
            System.out.print(String.valueOf(b)+",");
            // System.out.printf("0x%02X ", b);
        }
        System.out.println();
        // 根据编码格式将字节数组重新转换回中文字符串
        String decodedString ="";
        try {
            String charset = (msgformat == 15) ? "GBK" : "iso-10646-ucs-2";
            decodedString= new String(ucs2Numbers, charset);
            System.out.println("Decoded String: " + decodedString);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return  decodedString;
    }

    public static String msgContentStrToByte( String msg , int msgformat)  {
        // 将字符串分割为字符串数组
        String[] intStringArray = msg.split(",");

        // 将字符串数组转换为整数数组
        int[] intArray = new int[intStringArray.length];
        for (int i = 0; i < intStringArray.length; i++) {
            intArray[i] = Integer.parseInt(intStringArray[i].trim());
        }

        // 将整数数组转换为字节数组
        byte[] byteArray = new byte[intArray.length];
        for (int i = 0; i < intArray.length; i++) {
            byteArray[i] = (byte) intArray[i];
        }

        // 打印字节数组
        System.out.println("Byte Array:");
        for (byte b : byteArray) {
            System.out.printf("0x%02X ", b);
        }
        System.out.println();

        return  msgContentByteToChinese(byteArray,msgformat);

    }



    public static void main(String[] args) {
        // 输入的UCS2编码的数字数组
         String msgcontent="人民万岁";
        int msgformat=8;
        /*   byte[] ucs2Numbers = msgContentToByte(msgcontent, msgformat);

        // 打印字节数组
        // 打印字节数组
        System.out.println((msgformat == 15 ? "GBK" : "UCS2") + " Bytes:");
        msgContentByteToChinese(ucs2Numbers,msgformat);*/


        String msg="78,-70,108,17,78,7,92,-127";
        msgContentStrToByte(msg,msgformat);

    }
}

第二版

java 复制代码
  /**
     *  内容转移为GBK 或者ucs2
     * @param msgcontent 内容
     * @param msgformat 转码方式
     * @return
     */
    public static byte[] msgContentToByte(String msgcontent, int msgformat)  {
        String charset = null;
        if (msgformat==15){
            charset = "GBK";
        } else if (msgformat==8){
            charset = "iso-10646-ucs-2";
        }
        byte[] bytes= new byte[]{};
        if(charset!=null){
            try {
                bytes= msgcontent.getBytes(charset);
            } catch (UnsupportedEncodingException e) {
                throw new IllegalArgumentException("Message can not Format");
            }
        } else {
            bytes= msgcontent.getBytes();
        }

        return  bytes;

    }

    /**
     *  根据传入中文转为16进制字符串
     * @param msgcontent
     * @param msgformat
     * @return
     */
    public static String msgContentToByteStr(String msgcontent, int msgformat)  {
        String charset = null;
        if (msgformat==15){
            charset = "GBK";
        } else if (msgformat==8){
            charset = "iso-10646-ucs-2";
        }
        byte[] bytes= new byte[]{};
        if(charset!=null){
            try {
                bytes= msgcontent.getBytes(charset);
            } catch (UnsupportedEncodingException e) {
                throw new IllegalArgumentException("Message can not Format");
            }
        } else {
            bytes= msgcontent.getBytes();
        }
        StringBuffer sb=new StringBuffer(8);
        for (byte b : bytes) {
            sb.append(String.format("%02X", b));
        }

        return  sb.toString();

    }

    /**
     *
     * @param ucs2Numbers
     * @param msgformat   15 = GBK ; 8 = iso-10646-ucs-2
     * @return
     */
    public static String msgContentByteToChinese( byte[] ucs2Numbers , int msgformat)  {

        // 根据编码格式将字节数组重新转换回中文字符串
        String decodedString ="";
        try {
            String charset = (msgformat == 15) ? "GBK" : "iso-10646-ucs-2";
            decodedString= new String(ucs2Numbers, charset).trim();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return  decodedString;
    }

    /**
     *  字段转中文
     * @param msg   如 String msg="78,-70,108,17,78,7,92,-127";
     * @param msgformat 15 = GBK ; 8 = iso-10646-ucs-2
     * @return
     */
    public static String msgContentStrToChinese( String msg , int msgformat)  {
        // 将字符串分割为字符串数组
        String[] intStringArray = msg.split(",");

        int[] intArray = new int[intStringArray.length];
        for (int i = 0; i < intStringArray.length; i++) {
            intArray[i] = Integer.parseInt(intStringArray[i].trim());
        }

        byte[] byteArray = new byte[intArray.length];
        for (int i = 0; i < intArray.length; i++) {
            byteArray[i] = (byte) intArray[i];
        }
        System.out.println("Byte Array:");
        for (byte b : byteArray) {
            System.out.printf("%02X", b);
           // System.out.printf(String.valueOf(b));
        }
        System.out.println();

        return  msgContentByteToChinese(byteArray,msgformat);

    }

    /**
     * 长短信拆分  byte数组传入,返回byte 数组
     * @param content 传入的conteng byte数组
     * @return
     */
    private static Vector<byte[]> splitContentByteToByte(byte[] content) {
        ByteArrayInputStream buf = new ByteArrayInputStream(content);
        Vector<byte[]> tmpv = new Vector<byte[]>();

        int msgCount = (int) (content.length / (140 - 6) + 1);
        int LeftLen = content.length;
        for (int i = 0; i < msgCount; i++) {
            byte[] tmp = new byte[140 - 6];
            if (LeftLen < (140 - 6)) {
                tmp = new byte[LeftLen];
            }
            try {
                buf.read(tmp);
                tmpv.add(tmp);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            LeftLen = LeftLen - tmp.length;
        }
        return tmpv;
    }

    /**
     * 长短信拆分
     * @param msg  内容
     * @param msgformat
     * @return
     */
    private static Vector<byte[]> splitContentStringToByte(String msg , int msgformat) {
        byte[] content = msgContentToByte(msg, msgformat);
        ByteArrayInputStream buf = new ByteArrayInputStream(content);
        Vector<byte[]> tmpv = new Vector<byte[]>();

        int msgCount = (int) (content.length / (140 - 6) + 1);
        int LeftLen = content.length;
        for (int i = 0; i < msgCount; i++) {
            byte[] tmp = new byte[140 - 6];
            if (LeftLen < (140 - 6)) {
                tmp = new byte[LeftLen];
            }
            try {
                buf.read(tmp);
                tmpv.add(tmp);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            LeftLen = LeftLen - tmp.length;
        }
        return tmpv;
    }

    /**
     * 16进制字符串转化为Byte数组
     * @param hex
     * @return
     */
    public static byte[] hexStringToByte(String hex) {
        if (hex == null || hex.length() == 0) {
            return null;
        }
        // 如果 hex 中的字符不是偶数个, 则忽略最后一个
        char[] hexChars = hex.toCharArray();
        byte[] bytes = new byte[hexChars.length / 2];

        for (int i = 0; i < bytes.length; i++) {
            bytes[i] = (byte) Integer.parseInt("" + hexChars[i * 2] + hexChars[i * 2 + 1], 16);
        }
        return bytes;
    }
    /**
     * 字符串转换为16进制字符串
     * @param strPart
     * @return
     */
    public static String stringToHexString(String strPart) {
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < strPart.length(); i++) {
            int ch = (int) strPart.charAt(i);
            String strHex = Integer.toHexString(ch);
            hexString.append(strHex);
        }
        return hexString.toString();
    }

    /**
     * 16进制字符串转化为字符串
     * @param hex
     * @return
     */
    public static String hexStringToString(String hex){
        StringBuilder sb = new StringBuilder();
        for( int i=0; i < hex.length()-1; i+=2 ){
            String output = hex.substring(i, (i + 2));
            int decimal = Integer.parseInt(output, 16);
            sb.append((char)decimal);
        }
        return sb.toString();
    }


    public static void main(String[] args) throws UnsupportedEncodingException {
        // 输入的UCS2编码的数字数组
         String msgcontent="人民万岁,abc。";
        int msgformat=15;
        System.out.println(" 根据传入中文打印--- "+msgContentToByteStr(msgcontent,msgformat));
         byte[] ucs2Numbers = msgContentToByte(msgcontent, msgformat);

          // 打印字节数组
        // 打印字节数组
        System.out.println((msgformat == 15 ? "GBK" : "UCS2") + " Bytes:");
        msgContentByteToChinese(ucs2Numbers,msgformat);

        String six="C8CBC3F1CDF2CBEA2C616263A1A3";
        String gbk = new String(hexStringToByte(six), "GBK");
        System.out.println("根据16进制反转中文-- "+gbk);

        String msg="78,-70,108,17,78,7,92,-127";


     //   String msgEnd = msgContentStrToChinese(msg, msgformat);
   //  6个字节
       /* String msgEnd ="【测试】返回地球的速度是地球质量决定的,对任何进入外太空后返回的载具都是一样。阿波罗11号再入速度是每秒10.67千米,阿波罗10号为了省时间更快到每秒11.08千米。这俩甚至不是人造物体里最快的,最快的是星尘号彗星探测器,样品返回舱再入速度是每秒12.9千米,或者说达到了49马赫数。";
        byte[] ucs2Numbers = msgContentToByte(msgEnd, msgformat);





     *//*   Vector<byte[]> bytes = splitContentByteToByte(ucs2Numbers);
        for (int i = 0; i < bytes.size(); i++) {
            System.out.println(Arrays.toString(bytes.get(i)) +",");
        }*//*

        Vector<byte[]> bytes = splitContentStringToByte(msgEnd, msgformat);
        for (int i = 0; i < bytes.size(); i++) {
            System.out.println(Arrays.toString(bytes.get(i)) +",");
        }*/
    }
相关推荐
m0_571957581 小时前
Java | Leetcode Java题解之第543题二叉树的直径
java·leetcode·题解
一点媛艺2 小时前
Kotlin函数由易到难
开发语言·python·kotlin
姑苏风2 小时前
《Kotlin实战》-附录
android·开发语言·kotlin
奋斗的小花生3 小时前
c++ 多态性
开发语言·c++
魔道不误砍柴功3 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2343 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
pianmian13 小时前
python数据结构基础(7)
数据结构·算法
闲晨3 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程3 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk4 小时前
Go-性能调优实战案例
开发语言·后端·golang