unicode字符串是否允许使用空字节?
我不会问utf8,我的意思是unicode字符串的高级对象表示。
背景
我们在PostgreSQL中通过Python存储包含空字节的unicode字符串。
如果再次读取字符串,则字符串会在空字节处剪切。
答案 0 :(得分:6)
关于数据库方面,PostgreSQL本身不允许在char / text / varchar字段的字符串中使用空字节('\0'
),因此如果您尝试存储包含它的字符串,则会收到错误。例如:
postgres=# SELECT convert_from('foo\000bar'::bytea, 'unicode');
ERROR: 22021: invalid byte sequence for encoding "UTF8": 0x00
如果您确实需要存储此类信息,则可以在PostgreSQL端使用bytea
数据类型。确保正确编码。
答案 1 :(得分:1)
Python本身完全能够同时拥有字节字符串和Unicode字符串,其中空字符的值为零。但是,如果调用以C实现的库,则该库可以使用在第一个空字符处停止的C约定。
答案 2 :(得分:-2)
由于字符串基本上只是数据和指针,因此可以在其中保存null。但是,由于null表示字符串的结尾(“null终止符”),因此在读取之前不知道大小的情况下无法读取超出null的值。
因此,您似乎应该将数据存储为二进制文件并将其作为缓冲区读取。
祝你好运!