java吧 关注:1,307,935贴子:12,883,751
  • 4回复贴,共1

Java编码表问题 求大哥过来解决一下下

只看楼主收藏回复

为什么Java写utf-8格式时候 一个汉字3个字节 写到window文本中系统就自动转换为utf-8格式 而不是系统默认GBK格式出现乱码


IP属地:江苏1楼2018-06-23 22:50回复
    我的意思是写3个字节比如:456,422,333。出来一个“你”字,windos系统怎么主动转换这个格式,默认txt文本不是ASNI嘛


    IP属地:江苏来自iPhone客户端2楼2018-06-23 23:30
    回复
      2026-08-23 07:56:04
      广告
      不感兴趣
      开通SVIP免广告
      擦, 刚才写了很长一段, 结果发布出来, 没影了
      1. "我的意思是写3个字节比如:456,422,333。出来一个“你”字"
      "你", utf-8编码之后的字节序列是, [0xE4, 0xBD, 0xA0], 你这里的 "456", "422", "333" 一个字节是表示不了的
      2. "windos系统怎么主动转换这个格式,默认txt文本不是ASNI嘛"
      这个不是系统决定的, 是对应的软件决定的, 软件以某种编码解析文件的字节内容, 转换为字符串然后放在软件的编辑器中
      比如, 最开始的时候, 编辑两个文件, 一个写入 [0xE4, 0xBD, 0xA0]["你"的utf-8编码后的字节序列], 另外一个文件写入 [0xC4, 0xE3]["你"的gbk编码后的字节序列]
      然后 使用 ultraEdit, notepad++, 打开两个文件, 然后 都没有问题, 得到的是"正常字符串", 第一个文件两个编辑器使用utf-8编码打开, 第二个文件两个编辑器都是以gbk打开
      然后 将第二个文件的内容替换为 [0xE4, 0xBD, 0xA0], 然后 再来使用两个软件打开两个文件, 你会发现 ultraEdit, 打开第二个文件 出现了"乱码", 仔细一看, notepadd++打开第二个文件的时候是以utf-8打开的, 然而 ultraEdit 是以gbk打开的
      这里 ultraEdit, 应该是第一次"识别了文件的编码", 之后将其缓存在某个地方, 然后 之后打开文件的时候就直接以改编码打开, 当然可以手动更新打开该文件的编码
      然后 notepad++, 应该是 每次都去"识别了文件的编码", atom 也和ultraEdit 使用的方式是一样的
      如何验证这个, 可以吧内容被替换为[0xE4, 0xBD, 0xA0]的第二个文件, 复制一份, 然后 重新使用 ultraEdit 打开, 你会发现 此时ultraEdit打开改文件的编码就是 utf-8 了
      至于 如何"识别了文件的编码", 这个就属于细节了, 可能有特定的优先级, 以及匹配度的计算吧


      10楼2018-06-24 11:37
      回复
        百度贴吧 ***什么尿性,


        12楼2018-06-24 11:39
        收起回复