GBK与UTF各种格式转码成unicode(java代码)

GBK与UTF各种格式转码成unicode(java代码)
注意:因为java项目使用的是unicode,所以在提交代码时,如果配置文件中有中文就很尴尬了很容器出现乱码,所以下面这段代码就将中文转换成unicode

代码:
 public void test6() throws UnsupportedEncodingException {
        //将中文字符按照GBK编码获取的字节码,在按照ISO8859-1编码成字符串,在获得对应的char字符
        char[] utfBytes = new String("网络设备".getBytes("GBK"), "ISO8859-1").toCharArray(); 

        String unicodeBytes = "";
        //将字符
        for (int byteIndex = 0; byteIndex < utfBytes.length; byteIndex++) {
            System.out.println(utfBytes[byteIndex]);
            String hexB = Integer.toHexString(utfBytes[byteIndex]); // ת»»Îª16½øÖÆÕûÐÍ×Ö·û´®
            if (hexB.length() <= 2) {
                hexB = "00" + hexB;
            }
            unicodeBytes = unicodeBytes + "\\u" + hexB;
        }
        System.out.println("unicodeBytes is: " + unicodeBytes);

    }

解释:
1.Integer.toHexString:这个方法是将十进制的数字转成二进制
2.new String(“网络设备”.getBytes(“GBK”), “ISO8859-1”):GBK是双字节编码中文,以ISO8859-1编码(单字节)
3.GBK兼容ISO8859-1编码,相对于iso8859-1编码来说,uniocode编码只是在前面增加了一个0字节,比如字母a为”00 61”(十六进制是061,表示是16进制)
4.上面的网络设备对应ISO8859-1,8个字节的编码。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Java 中,可以使用 `java.nio.charset.Charset` 类来实现 UnicodeGBK转码。 首先,需要使用 `Charset.forName()` 方法来获取 GBK 编码的 `Charset` 对象: ``` Charset gbkCharset = Charset.forName("GBK"); ``` 然后,使用这个 `Charset` 对象来创建一个 `CharsetEncoder` 对象,用于将 Unicode 编码的字符串换为 GBK 编码: ``` CharsetEncoder encoder = gbkCharset.newEncoder(); ``` 最后,使用 `encode()` 方法将 Unicode 编码的字符串换为 GBK 编码: ``` String unicodeString = "Hello, 世界"; ByteBuffer byteBuffer = encoder.encode(CharBuffer.wrap(unicodeString)); ``` 这样,就可以得到一个包含 GBK 编码字节的 `ByteBuffer` 对象了。你可以使用这个对象来进行后续的操作,比如写入文件或者发送给其他程序。 示例代码如下: ```java import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; public class UnicodeToGBK { public static void main(String[] args) throws Exception { // 获取 GBK 编码的 Charset 对象 Charset gbkCharset = Charset.forName("GBK"); // 创建 CharsetEncoder 对象 CharsetEncoder encoder = gbkCharset.newEncoder(); // 要换的 Unicode 编码的字符串 String unicodeString = "Hello, 世界"; // 将 Unicode 编码的字符串换为 GBK 编码 ByteBuffer byteBuffer = encoder.en ### 回答2: 在Java中,可以使用Java编码库提供的字符编码换类`Charset`和字节编码类`CharsetEncoder`来实现UnicodeGBK转码。 首先,我们需要将Unicode字符串编码为字节序列。可以使用`Charset`类的静态方法`forName`来获取指定编码方式的实例,如`Charset.forName("Unicode")`获取Unicode编码的实例。 然后,我们可以调用`CharsetEncoder`类的`encode`方法将Unicode字符串换为字节序列。这可以通过创建一个`CharBuffer`实例来完,将Unicode字符串放入`CharBuffer`中,然后调用`CharsetEncoder`的`encode`方法。最终,我们可以使用`ByteBuffer`类的`array`方法获取到换后的字节序列。 接下来,我们需要将字节序列换为GBK编码的字符串。可以使用`Charset.forName("GBK")`获取GBK编码的实例,然后将字节序列放入`ByteBuffer`中,并调用`CharsetDecoder`类的`decode`方法,将字节序列解码为GBK编码的字符串。 以下是一个示例代码: ```java import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; import java.nio.charset.CharsetDecoder; public class UnicodeToGBKConverter { public static String unicodeToGBK(String unicode) { Charset unicodeCharset = Charset.forName("Unicode"); CharsetEncoder encoder = unicodeCharset.newEncoder(); Charset gbkCharset = Charset.forName("GBK"); CharsetDecoder decoder = gbkCharset.newDecoder(); CharBuffer unicodeBuffer = CharBuffer.wrap(unicode); ByteBuffer unicodeBytes; try { unicodeBytes = encoder.encode(unicodeBuffer); } catch (Exception e) { e.printStackTrace(); return null; } ByteBuffer gbkBytes = ByteBuffer.allocate(unicodeBytes.limit()); try { gbkBytes.put(unicodeBytes.array()); gbkBytes.rewind(); } catch (Exception e) { e.printStackTrace(); return null; } String gbkString; try { gbkString = decoder.decode(gbkBytes).toString(); } catch (Exception e) { e.printStackTrace(); return null; } return gbkString; } public static void main(String[] args) { String unicodeString = "你好"; String gbkString = unicodeToGBK(unicodeString); System.out.println("GBK string: " + gbkString); } } ``` 以上代码将输出`GBK string: 浣犲ソ`,即将Unicode编码的字符串"你好"转码GBK编码的字符串"浣犲ソ"。 ### 回答3: Java中提供了 `java.nio.charset.Charset` 类来进行字符编码换。下面是一个将中文Unicode编码GBK编码的示例程序: ```java import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; public class UnicodeToGBKConverter { public static String convert(String unicodeString) { // 将Unicode字符串为字节数组 byte[] unicodeBytes = unicodeString.getBytes(StandardCharsets.UTF_16BE); // 将字节数组从Unicode编码GBK编码 byte[] gbkBytes = new String(unicodeBytes, StandardCharsets.UTF_16BE).getBytes(Charset.forName("GBK")); // 将字节数组GBK编码的字符串 return new String(gbkBytes, Charset.forName("GBK")); } public static void main(String[] args) { String unicodeString = "\u4E2D\u6587"; // 中文Unicode编码字符串 String gbkString = convert(unicodeString); System.out.println(gbkString); // 输出: 中文 System.out.println(gbkString.getBytes(Charset.forName("GBK"))); // 输出: [-42, -48, -58, -67] } } ``` 上述示例中,`convert` 方法将输入的Unicode编码字符串为字节数组,再使用 `GBK` 字符集进行解码换,最后将字节数组GBK编码的字符串输出。 `main` 方法中的 `unicodeString` 是中文Unicode编码字符串,经过换后输出的 `gbkString` 为对应的GBK编码字符串。同时也可以通过 `getBytes` 方法获取换后的字节数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值