V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
muzzy
V2EX  ›  Java

Java 字符编码问题

  •  
  •   muzzy · Mar 31, 2018 · 2395 views
    This topic created in 2951 days ago, the information mentioned may be changed or developed.

    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 replies    2018-04-05 21:44:42 +08:00
    Fri
        1
    Fri  
       Apr 5, 2018
    问题出在 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  
       Apr 5, 2018
    1# 抱歉.....重新思考了下发现上面的回复是❌的。

    可以确认的是 UTF-8 是长度可变的一种编码方式,编码后会占用 1~4 个字节不等,GBK 编码后占用 2 个字节。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2737 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:40 · PVG 23:40 · LAX 08:40 · JFK 11:40
    ♥ Do have faith in what you're doing.