我的客户端和服务器之间的通信是UTF-8中的XML。然而,最近我在数据库中发现了一个非UTF-8字符 - 整个数据库中只有一个字符。显然它需要保存。
但是,我不想将客户端和服务器之间的所有消息都更改为UTF-16,因为它们的大小会突然加倍,仅用于一个迷路的unicode字符。
我可以使用更高效的文本编码吗?也许仍然会将大多数ASCII字符传输为8位,但是仍然允许以某种方式发送非UTF-8字符?
答案 0 :(得分:3)
不要混淆UTF-8和ASCII。 UTF-8 是 Unicode编码。如果你真的支持UTF-8,那么这个Unicode字符不会引起任何问题。
如果您错误地说您支持UTF-8,而实际上您只支持ASCII,那么您的目标应该是支持UTF-8。
答案 1 :(得分:3)
是否更有效率 文字编码我可以使用?也许一个 这将传输大多数ASCII 字符仍为8位?
这是完全 utf-8是什么。
答案 2 :(得分:1)
我认为你应该试着理解为什么“这个角色需要保留”。
您的数据库的编码是什么?如果它是UTF-8,那么它可能只包含UTF-8字符。
您是否以<>的编码存储字符的UTF-8二进制表示形式?到utf-8?
你应该坚持使用utf-8并更全面地了解你的编码链。
答案 3 :(得分:0)
UTF-8已经支持完整的Unicode目录,它可能是以Unicode格式存储西方语言的最有效编码。您发现的错误不是由于字符不受支持:这是由于字符无效(即编码错误)。
虽然理论上要求XML不包含任何错误,但拒绝完整数据几乎不是一种选择,因为那里的供应商可能并不关心数据的有效性。我的建议是记录无效字符,静默丢弃它们,然后警告供应商。
答案 4 :(得分:0)
没有非UTF-8字符。 UTF-8可以编码每个字符,即Unicode中的每个字符。确实,有八位字节序列不是任何字符的UTF-8编码;但那是相当不同的。我怀疑你收到一条错误消息,指出传入的八位字节流无法解码为UTF-8。当发件人对iso-8859-1中的数据进行编码并且收件人希望以UTF-8编码时,就会发生这种情况。