V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
muzzy
V2EX  ›  Java

Java 字符编码问题

  •  
  •   muzzy · 2018-03-31 14:44:48 +08:00 · 1576 次点击
    这是一个创建于 2189 天前的主题,其中的信息可能已经有所发展或是发生改变。

    String name="思"; String sendName = new String(name.getBytes("UTF-8"),"GBK"); System.out.println(sendName); String recvName = new String(sendName.getBytes("GBK"),"UTF-8"); System.out.println(recvName); 各位 java 程序员,上段代码中的编码转换有什么问题吗?大部分 recvName 中大部分汉子都可以正常显示,但‘思’和‘怡’两个字乱码。

    2 条回复    2018-04-05 21:44:42 +08:00
    Fri
        1
    Fri  
       2018-04-05 21:04:25 +08:00
    问题出在 UTF-8 编码后的“思{-26, -128, -99 }”字占用三个字节,而 GBK 编码是每两个字节转为一个字符,所以在用 GBK 编码{-26, -128, -99 }的时候,系统会用“ 0 ”补全缺少的第四个字节变为{-26, -128, -99, 0}以进行编码。

    之后将{-26, -128, -99, 0}按 UTF-8 编码为字符串时,因为多了一个字节“ 0 ”,所以就无法映射到“思{-26, -128, -99 }’字了。
    Fri
        2
    Fri  
       2018-04-05 21:44:42 +08:00
    1# 抱歉.....重新思考了下发现上面的回复是❌的。

    可以确认的是 UTF-8 是长度可变的一种编码方式,编码后会占用 1~4 个字节不等,GBK 编码后占用 2 个字节。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5307 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 01:28 · PVG 09:28 · LAX 18:28 · JFK 21:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.