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

有哪些无效的 utf8 编码字节顺序的字符串?在 Java 里怎么用字符串常量表示?

  •  
  •   tctc4869 · 2020-07-24 08:56:05 +08:00 · 1893 次点击
    这是一个创建于 1343 天前的主题,其中的信息可能已经有所发展或是发生改变。

    存带有 0x00 的数据到 postgresql 数据库会出现“无效的 utf8 编码字节顺序”的异常。

    在 java 里,0x00 用字符串常量表示为 \000,不过除了 0x00,还有哪些?在 java 里怎么表示?

    3 条回复    2020-07-24 23:13:27 +08:00
    icyalala
        1
    icyalala  
       2020-07-24 09:42:12 +08:00
    0x00 是有效的 Unicode: https://unicode-table.com/en/0000/ 只是 postgre 不支持罢了。
    utf8 编码的规则可以看这里: https://en.wikipedia.org/wiki/UTF-8#Description
    rockyou12
        2
    rockyou12  
       2020-07-24 10:17:16 +08:00
    0x00 在非常多的系统里都不支持,不要以为 java 支持或者是有效 unicode 就去用。我也对接过 iot 硬件,出了 0x00 其实基本都至少不会异常,最多就是后面的几个控制字符(比如 0x01,0x02 这些),有些显示会出问题。其实 ls 发的 utf8 的表就行了,只要不是人肉拼二进制码基本很难遇到。

    0x00 经常遇到只是因为用 c 写的代码初始化字符的时候要忘记赋值,要不就是序列化它只能用 0x00 来表示 null 字符串
    ruyu
        3
    ruyu  
       2020-07-24 23:13:27 +08:00
    postgresql 确实不支持 '\0' . 不过话说 C 语言里 '\0' 表示字符串结尾吧, 这个还是有点问题的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1538 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 17:16 · PVG 01:16 · LAX 10:16 · JFK 13:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.