gpt4 book ai didi

java - 如何在 .NET、Java 和 Sql Server 上获得正确的字符数? (在谷歌浏览器中阅读)

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:31:27 25 4
gpt4 key购买 nike

给定这个字符串

HELLO𝄞水

图例: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𝄞水');

.NET、Java 和 Sql Server 在给定的 unicode 字符不是可变长度时返回正确的字符串长度,它们都返回 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 上获得正确的字符数?如果函数返回不正确的字符数,将很难实现下一个推特。

如果我可以补充一点,我无法使用 Firefox 发布此内容。我在谷歌浏览器中发布了这个问题。 Firefox 无法显示可变长度的 unicode

最佳答案

C#(可能还有 SQL 和 Java)返回字符串中 Char 元素的数量。

String.Length

The Length property returns the number of Char objects in this instance, not the number of Unicode characters. The reason is that a Unicode character might be represented by more than one Char. Use the System.Globalization.StringInfo class to work with each Unicode character instead of each Char.

关于java - 如何在 .NET、Java 和 Sql Server 上获得正确的字符数? (在谷歌浏览器中阅读),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10491777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com