从字节数组的末尾删除 UTF-8 字符
remove UTF-8 char from end of a byte array
我想从 C 中字节数组的末尾删除 utf8 字符
我已经尝试使用下面的代码来删除字符,该代码适用于 1 或 2 字节的字符,但不适用于删除需要超过 2 个字节的字符 space...
我有 2 个问题:
有没有更好的方法来实现这个,我该如何修复当前代码
if( ((int)bytearray[counter-6]) >= 128 + 64 + 32 + 16 + 8 + 4 && strlen(bytearray) >= 6 )
for (i=0;i<6;i++)
bytearray[--counter] = (char) 0;
else if( ((int)bytearray[counter-5]) >= 128 + 64 + 32 + 16 + 8 && strlen(bytearray) >= 5 )
for (i=0;i<5;i++)
bytearray[--counter] = (char) 0;
else if( ((int)bytearray[counter-4]) >= 128 + 64 + 32 + 16 && strlen(bytearray) >= 4 )
for (i=0;i<4;i++)
bytearray[--counter] = (char) 0;
else if( ((int)bytearray[counter-3]) >= 128 + 64 + 32 && strlen(bytearray) >= 3 )
for (i=0;i<3;i++)
bytearray[--counter] = (char) 0;
else if( ((int)bytearray[counter-2]) >= 128 + 64 && strlen(bytearray) >= 2 )
for (i=0;i<2;i++)
bytearray[--counter] = (char) 0;
else
bytearray[--counter] = (char) 0;
从 http://en.wikipedia.org/wiki/UTF-8#Description 中,您可以发现每个 UTF-8 字符的起始字节是 0xxxxxxx
或 11xxxxxx
。即起始字节为never10xxxxxx
.
因此,假设 bytearray
是 char*
或 char[]
类型,那么您可以写成
for (counter = strlen(bytearray)-1; counter >= 0; --counter) {
if ((bytearray[counter] & 0xC0) != 0x80) {
// beginning byte of a character
bytearray[counter] = '[=10=]';
break;
}
// consequent bytes. Clear and keep going.
// Indeed this is optional since the first '[=10=]' already terminates a C string
bytearray[counter] = '[=10=]';
}
我想从 C 中字节数组的末尾删除 utf8 字符
我已经尝试使用下面的代码来删除字符,该代码适用于 1 或 2 字节的字符,但不适用于删除需要超过 2 个字节的字符 space...
我有 2 个问题:
有没有更好的方法来实现这个,我该如何修复当前代码
if( ((int)bytearray[counter-6]) >= 128 + 64 + 32 + 16 + 8 + 4 && strlen(bytearray) >= 6 )
for (i=0;i<6;i++)
bytearray[--counter] = (char) 0;
else if( ((int)bytearray[counter-5]) >= 128 + 64 + 32 + 16 + 8 && strlen(bytearray) >= 5 )
for (i=0;i<5;i++)
bytearray[--counter] = (char) 0;
else if( ((int)bytearray[counter-4]) >= 128 + 64 + 32 + 16 && strlen(bytearray) >= 4 )
for (i=0;i<4;i++)
bytearray[--counter] = (char) 0;
else if( ((int)bytearray[counter-3]) >= 128 + 64 + 32 && strlen(bytearray) >= 3 )
for (i=0;i<3;i++)
bytearray[--counter] = (char) 0;
else if( ((int)bytearray[counter-2]) >= 128 + 64 && strlen(bytearray) >= 2 )
for (i=0;i<2;i++)
bytearray[--counter] = (char) 0;
else
bytearray[--counter] = (char) 0;
从 http://en.wikipedia.org/wiki/UTF-8#Description 中,您可以发现每个 UTF-8 字符的起始字节是 0xxxxxxx
或 11xxxxxx
。即起始字节为never10xxxxxx
.
因此,假设 bytearray
是 char*
或 char[]
类型,那么您可以写成
for (counter = strlen(bytearray)-1; counter >= 0; --counter) {
if ((bytearray[counter] & 0xC0) != 0x80) {
// beginning byte of a character
bytearray[counter] = '[=10=]';
break;
}
// consequent bytes. Clear and keep going.
// Indeed this is optional since the first '[=10=]' already terminates a C string
bytearray[counter] = '[=10=]';
}