假设我有一个UTF-16字节数组。如何计算UTF-16字节数组中有多少个字符?数组也可以在边界内。例如,假设有一个4字节的UTF-16字符,并且这4个字节中只有3个被读取到缓冲区中。然后我尝试计算那个3字节的缓冲区。我如何检测没有足够的字节?
发布于 2020-09-15 03:05:34
4字节UTF-16字符称为代理项对,所有代理项对都以0xD800到0xDBFF范围内的代码单元开头。因此,要计算UTF-16字符串中的字符数(也称为代码点),您需要执行以下操作(伪代码):
char_count = 0;
string_pos = 0;
while (!end_of_string)
{
code_unit = input_string [string_pos];
++char_count;
if (code_unit >= 0xd800 && code_unit <= 0xdbff)
string_pos += 2;
else
++string_pos;
}要检测不完整的代理项对,只需在检测到起始值后检查字符串中是否有任何代码单元。您可能还想检查无效的代理项对。
维基百科对UTF-16 here有很好的评价。
发布于 2020-09-15 03:04:30
检查解码器的状态。如果状态是就绪的,那么它就足够了,否则就不够了。当然,您需要维护每个传入代码点的状态。
https://stackoverflow.com/questions/63890221
复制相似问题