跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教一下 Java 如何把一个 String 转成 GBK 编码?
未分類
29 10 月 2020

请教一下 Java 如何把一个 String 转成 GBK 编码?

请教一下 Java 如何把一个 String 转成 GBK 编码?

資深大佬 : chopper 6

我想把一个中文的 String 转换成 GBK 编码,因为 Java 默认编码是 unicode,所以我想 new String(unicode.getBytes(“GBK”))应该就可以了。 但是这个方法转换 “中文”后的文件用 GBK 格式打开显示的是: 锟斤拷锟斤拷。 我另外用 iconv 转换的文件用 GBK 格式打开就是正常的。请问这是为什么?

大佬有話說 (16)

  • 資深大佬 : proxychains

    encode

  • 資深大佬 : Cbdy

    这个表述。。。你还是说一下原始需求吧

  • 主 資深大佬 : chopper

    @Cbdy 要把中文转换成 GBK 编码。

  • 資深大佬 : xiangyuecn

    new String(unicode.getBytes(“utf-8″) ,”gbk”)

  • 資深大佬 : Cbdy

    @chopper 中文本来就可以用 GBK 存储,为什么要转?

  • 主 資深大佬 : chopper

    @xiangyuecn String unicode = “中文”; 打印出来的结果是:涓枃, 打开文件显示 娑擃厽鏋�
    看上去是错的

  • 資深大佬 : SkyLine7

    new String(new String(unicode.getBytes(“utf-8″),”iso-8859-1”).getBytes(“iso-8859-1″),”gbk”);

  • 主 資深大佬 : chopper

    @Cbdy 但是 Java 默认是 unicode,如果不转成 GBK 的话,服务器端用 GBK 打开文件看到的就是乱码。服务器强制上传文件格式为 GBK 。

  • 資深大佬 : zcqshine

    public class EncodingUtil {

    /**
    * 将原正确编码的字符串 src 转化为 srcCharset 的字符串
    *
    * 前提是: 确保原字符串的编码是无损的(完整的). 无需知道原字符串的具体编码, 转化为目标编码的字符串由 Java 库自动实现,无需自己手动实现.
    * 如果原字符串不能转化为目标编码,将会抛出 UnsupportedEncodingException
    * @param src
    * @param srcCharset
    * @param destCharset
    * @return
    */
    public static String convertEncodingString(String src, Charset srcCharset, Charset destCharset){
    byte[] bytes = src.getBytes(srcCharset);
    return new String(bytes, destCharset);
    }

    /**
    * 将编码为 srcCharset 的字节数组 src 转化为编码为 desCharset 的字节数组
    * @param src
    * @param srcCharSet
    * @param destCharset
    * @return
    */
    public static byte[] convertEncodingBytes(byte[] src, Charset srcCharSet, Charset destCharset){
    String s = new String(src, srcCharSet);
    return s.getBytes(destCharset);
    }

    public static String byteToHex(byte… byteArr){
    if (byteArr == null || byteArr.length == 0){
    return “”;
    }else {
    StringBuilder sb = new StringBuilder();
    String tmp = null;

    for (byte b : byteArr) {
    tmp = Integer.toHexString(b);
    //byte 进行运算时,会自动转化为 int,否则可能会出错
    if (b >>> 31 == 1) {
    //最高位为 1, 负数
    sb.append(tmp.substring(6));
    } else {
    //最高位为 0,正数
    if (tmp.length() < 2){
    sb.append(‘0’);
    }
    sb.append(tmp);
    }
    sb.append(‘ ‘);
    }

    //delete last space
    sb.deleteCharAt(sb.length() – 1);
    return sb.toString();

    }
    }

    }

  • 資深大佬 : pursuer

    String 就只是 String,Java 没定义 String 一定要什么编码存储,你要想输出 GBK 编码,就要在输出为二进制的时候转,例如
    OutputStreamWriter(OutputStream out, String charsetName) 中指定 charsetName 为”gbk”
    或者
    getBytes(String charsetName)中指定 charsetName 为”gbk”

  • 資深大佬 : Cbdy

    @chopper 首先,Unicode 和 GBK 是两种不同的东西,前者是字符集,后者是具体编码;其次,Java 虚拟机对 java.lang.String 的处理用的是 UTF16,但是你大多数时候不用关心,因为 String 类屏蔽了大多数底层的细节

    你的需求很简单,就是把一个字符串保存为 GBK 的文本。那你写文件流的时候指定一下二进制的编码,如 GBK 就可以了

  • 資深大佬 : liuxey

    4 正确

  • 資深大佬 : qwerthhusn

    str.getBytes(“GBK”)

  • 資深大佬 : fangcan

    new String(unicode.getBytes(“gbk”) ,”gbk”)

  • 資深大佬 : warcraft1236

    GBK 是 Unicode 的一种具体实现

  • 資深大佬 : palmers

    将内容写入的时候指定编码为 GBK 然后读取的时候按照 GBK 读取就可以了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具