notes icon indicating copy to clipboard operation
notes copied to clipboard

统计 UTF-8 字符(文字)个数 or counting UTF-8 characters

Open lanlin opened this issue 3 years ago • 4 comments

背景

假如,你有一个蒸汽炸锅... 咳咳,不好意思,串台了。

假如,你需要写一个验证规则来限制文章标题和内容的长度,而你的产品又是面向全世界的...

一般我们会选择 UTF-8 来作为字符集,但 UTF-8 字符集一个字符所占的字节数不定 1-4个字节的范围。

因此 UTF-8 字符串的字节数跟实际的文字字符数不见得是相同的,单纯统计字符串的字节数是不准确的。

下面是不同编程语言的字符数统计方法备忘,欢迎补充

两个特殊字符串,供大家尝试

'I❤𠀰'        // 3 characters
'😹🐶😹🐶'  // 4 characters

lanlin avatar Mar 10 '22 10:03 lanlin

PHP

// 10 characters
\mb_strlen('hello 😹🐶😹🐶', 'UTF-8');

lanlin avatar Mar 10 '22 10:03 lanlin

Go

// 10 characters
len([]rune("hello 😹🐶😹🐶"))

lanlin avatar Mar 10 '22 10:03 lanlin

JavaScript

// 10 characters
[...'hello 😹🐶😹🐶'].length;
  1. JavaScript has a Unicode problem
  2. JavaScript 如何正确处理 Unicode 编码问题!

lanlin avatar Mar 10 '22 10:03 lanlin

Rust

use unicode_segmentation::UnicodeSegmentation;

// 10 characters
"hello 😹🐶😹🐶".graphemes(true).count();

lanlin avatar Mar 10 '22 11:03 lanlin