给定这个字符串
你好水</p>
图例:http ://en.wikipedia.org/wiki/UTF-16
is 4 bytes
水 is 2 bytes
Postgresql 数据库 (UTF-8) 返回正确的长度 7:
select length('HELLO水');
我注意到 .NET 和 Java 都返回 8:
Console.WriteLine("HELLO水");
System.out.println("HELLO水");
Sql Server 也返回 8:
SELECT LEN('HELLO水');
当给定的 unicode 字符不是可变长度时,.NET、Java 和 Sql Server 返回正确的字符串长度,它们都返回 6:
HELLO水
他们为可变长度返回 7,这是不正确的:
HELLO
.NET、Java 和 Sql Server 使用 UTF-16。似乎他们计算 UTF-16 字符串长度的实现被破坏了。或者这是 UTF-16 规定的?UTF-16 作为其 UTF-8 表亲具有可变长度能力。但是为什么 UTF-16(或者是 .NET、Java、SQL Server 等等的错?)不能像 UTF-8 那样正确计算字符串的长度?
Python 返回长度为 12,但我不知道如何解释它返回 12 的原因。这可能完全是另一个话题,我离题了。
len("HELLO水")
问题是,如何在 .NET、Java 和 Sql Server 上获得正确的字符数?如果函数返回不正确的字符数,则很难实现下一个 twitter。
如果我可以添加,我无法使用 Firefox 发布此内容。我在谷歌浏览器中发布了这个问题。Firefox 无法显示可变长度的 unicode