mirror of
https://gitee.com/zlgopen/awtk.git
synced 2024-11-30 02:58:26 +08:00
add tk_utf8_trim_invalid_char
This commit is contained in:
parent
35149fde61
commit
d5827b7070
@ -2,6 +2,7 @@
|
||||
|
||||
2021/12/11
|
||||
* 增加tk\_str\_is\_in\_array。
|
||||
* 增加tk\_utf8\_trim\_invalid\_char。
|
||||
* 完善project.json(感谢俊杰提供补丁)
|
||||
|
||||
2021/12/09
|
||||
|
@ -289,3 +289,25 @@ char* tk_utf8_dup_utf16(const wchar_t* in, int32_t size) {
|
||||
|
||||
return tk_utf8_from_utf16_ex(in, size, out, out_size - 1);
|
||||
}
|
||||
|
||||
char* tk_utf8_trim_invalid_char(char* str) {
|
||||
int32_t i = 0;
|
||||
int32_t n = 0;
|
||||
char* p = str;
|
||||
return_value_if_fail(str != NULL, str);
|
||||
|
||||
while (*p) {
|
||||
n = tk_utf8_get_bytes_of_leading(*p);
|
||||
if (n > 0) {
|
||||
for (i = 0; i < n; i++) {
|
||||
if (p[i] == '\0') {
|
||||
*p = '\0';
|
||||
return str;
|
||||
}
|
||||
}
|
||||
}
|
||||
p += n;
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
@ -122,6 +122,21 @@ char* tk_utf8_dup_utf16(const wchar_t* in, int32_t size);
|
||||
*/
|
||||
uint32_t tk_utf8_get_bytes_of_leading(uint8_t c);
|
||||
|
||||
/**
|
||||
* @method tk_utf8_trim_invalid_char
|
||||
*
|
||||
* 如果字符串最后一个字符串是无效的,删掉该无效字符。
|
||||
*
|
||||
* > 对于用strncpy/snprintf等生成字符串时,如果目标字符串内存大小不够,
|
||||
* > 可能最后一个字符被从中间截断,导致该字符是无效的,这可能会触发assert,
|
||||
* > 本函数可以用来删除最后一个无效字符。
|
||||
*
|
||||
* @param {const char*} str 输入字符串。
|
||||
*
|
||||
* @return {char*} 返回UTF8字符串。
|
||||
*/
|
||||
char* tk_utf8_trim_invalid_char(char* str);
|
||||
|
||||
END_C_DECLS
|
||||
|
||||
#endif /*TK_UTF8_H*/
|
||||
|
@ -56,3 +56,34 @@ TEST(Utf8, dup) {
|
||||
ASSERT_STREQ(str, text);
|
||||
TKMEM_FREE(text);
|
||||
}
|
||||
|
||||
TEST(Utf8, trim_invalid) {
|
||||
char text[32] = {0};
|
||||
const char* str = "中文";
|
||||
|
||||
memset(text, 0x00, sizeof(text));
|
||||
|
||||
strncpy(text, str, 1);
|
||||
ASSERT_STREQ(tk_utf8_trim_invalid_char(text), "");
|
||||
|
||||
strncpy(text, str, 2);
|
||||
ASSERT_STREQ(tk_utf8_trim_invalid_char(text), "");
|
||||
|
||||
strncpy(text, str, 3);
|
||||
ASSERT_STREQ(tk_utf8_trim_invalid_char(text), "中");
|
||||
|
||||
strncpy(text, str, 4);
|
||||
ASSERT_STREQ(tk_utf8_trim_invalid_char(text), "中");
|
||||
|
||||
strncpy(text, str, 5);
|
||||
ASSERT_STREQ(tk_utf8_trim_invalid_char(text), "中");
|
||||
|
||||
strncpy(text, str, 6);
|
||||
ASSERT_STREQ(tk_utf8_trim_invalid_char(text), "中文");
|
||||
|
||||
strncpy(text, str, 7);
|
||||
ASSERT_STREQ(tk_utf8_trim_invalid_char(text), "中文");
|
||||
|
||||
strncpy(text, "abc", 4);
|
||||
ASSERT_STREQ(tk_utf8_trim_invalid_char(text), "abc");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user