mb_strlen 和 android java 对于相同的字符长度显示不同的结果

问题描述 投票:0回答:1

在 PHP 中

echo mb_strlen('🌦')
结果是1

在 Android Java 中

"🌦".length()
结果是2

另一种编写相同字符/图标的方法

"\uD83C\uDF26".length()
结果是2

Android 编码

Charset defaultCharset = Charset.defaultCharset()
=> UTF=8

(new OutputStreamWriter(new ByteArrayOutputStream())).getEncoding()
=> UTF-8

文件编码为UTF-8。

问题

为什么 Android Java 显示的结果与 mb_strlen 不同?

我假设mb_strlen结果是正确的,长度是1。如何让Java理解字符串来计算长度为1?

LE:

问题是我有一个来自 PHP 服务器的字符串,如下所示: 长度|字符串... 例如:

5|juice3|aha3|yes

如果字符串包含 '🌦',例如

7|sample🌦3|yes
那么 Android Java 会将其计为 2 而不是 1,并且会错误地解析字符串

java encoding mbstring
1个回答
0
投票

在 Java 中,

String.length()
返回字符串中
char
的数量(或 “Unicode 代码单元”)。 Java
char
是 UTF-16,这意味着它需要两个 Unicode 代码单元来表示某些“Unicode 代码点”(在 UTF-16 中,大多数代码 units 也是代码 points,但并非所有代码点都可以用单个代码表示单位)。

如果你想知道Unicode码位的数量,你需要使用

String.codePointCount(int, int)
。例如,对于整个字符串中的码点数量:

someString.codePointCount(0, someString.length())
© www.soinside.com 2019 - 2024. All rights reserved.