UTF-8字符串可以包含零字节吗?我要通过ascii纯文本协议发送它,是否应该使用base64之类的东西对其进行编码?
是的,UTF8中的零字节是代码点0,NUL。有没有将在UTF8与在它一个零字节的任何位置进行编码等Unicode代码点。
可能的代码点及其UTF8编码为:
Range Encoding Binary value ----------------- -------- -------------------------- U+000000-U+00007f 0xxxxxxx 0xxxxxxx U+000080-U+0007ff 110yyyxx 00000yyy xxxxxxxx 10xxxxxx U+000800-U+00ffff 1110yyyy yyyyyyyy xxxxxxxx 10yyyyxx 10xxxxxx U+010000-U+10ffff 11110zzz 000zzzzz yyyyyyyy xxxxxxxx 10zzyyyy 10yyyyxx 10xxxxxx
您可以看到,所有非零ASCII字符都被表示为自己,而所有多字节序列的所有字节均具有1的高位。
您可能需要注意,您的ascii纯文本协议不会严重对待非ASCII字符(因为这将是所有非ASCII代码点)。