我需要获取实际的字符数(而不是字节数),类似于在 V8 中获取字符串长度时的输出。
\n\n这对于 Twitter 的使用是必要的,无论使用哪种语言,Twitter 都会按字符数计算,即使使用 UTF-8(它不按字节长度计算)。
\n\n前任:
\n\n在 chrome/chromium js 控制台,或在 Nodejs 中:
\n\n> "Sch\xc3\xb6ne Gr\xc3\xbc\xc3\x9fe".length\n< 12\nRun Code Online (Sandbox Code Playgroud)\n\n在 Qt 4.8.2 中,尝试QString someStr = "Sch\xc3\xb6ne Gr\xc3\xbc\xc3\x9fe"; cout << someStr.length()将输出 15,这不是我的目标。
如果您确实想计算字素簇(即用户感知的字符)而不是代码单元,则需要QTextBoundaryFinder. 这是一个使用示例:
#include <iostream>
#include <QTextBoundaryFinder>
#include <QString>
int main()
{
const QString s=QString::fromUtf8(u8"abc\U00010139def\U00010102g");
std::cout << "String: \"" << s.toStdString() << "\"\n";
std::cout << "Code unit count : " << s.length() << "\n";
QTextBoundaryFinder tbf(QTextBoundaryFinder::Grapheme, s);
int count=0;
while(tbf.toNextBoundary()!=-1)
++count;
std::cout << "Grapheme cluster count: " << count << "\n";
}
Run Code Online (Sandbox Code Playgroud)
输出:
#include <iostream>
#include <QTextBoundaryFinder>
#include <QString>
int main()
{
const QString s=QString::fromUtf8(u8"abc\U00010139def\U00010102g");
std::cout << "String: \"" << s.toStdString() << "\"\n";
std::cout << "Code unit count : " << s.length() << "\n";
QTextBoundaryFinder tbf(QTextBoundaryFinder::Grapheme, s);
int count=0;
while(tbf.toNextBoundary()!=-1)
++count;
std::cout << "Grapheme cluster count: " << count << "\n";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8828 次 |
| 最近记录: |