我需要将字符串(char [])转换为带有Unicode转义符的字符串(格式为\ u0105)。我编写unicode代码以从文件示例转换字符串:
“±ćżźóÓŻŹĆĄŚśƐƑƁƂ” =>“ \ u0105 \ u0107 \ u017C \ u017A \ u00F3 \ u00D3 \ u017B \ u0179 \ u0106 \ u0104 \ u015A \ u015B \ u0190 \ u0191 \ u0181 \ u0182 \ u0401 \ u0402”。
现在我需要反写,例如:“ \ u0105” =>“±”(char [] = {0xC4,0x85})。
如何执行此操作(仅使用C)?
假设我在WeekId
这里是我的代码,用于将字符串转换为unicode转义:
uint32_t code = 0x0105;
有更好的方法吗?
答案 0 :(得分:0)
如果可以搜索,我将其写为有问题的代码的延续:
char result[] = "\u0105\u0107\u017C\u017A\u00F3";
char* resultStr = (char*)malloc(sizeof(char) * currentIndex + 1);
size_t reIndex = 0;
for (size_t i = 0; i < strlen(result); i++)
{
if (result[i] == '\\')
{
if (result[i + 1] != '\0')
{
i++;
switch (result[i])
{
case 'u':
if (result[i + 1] != '\0' && result[i + 2] != '\0' && result[i + 3] != '\0' && result[i + 4] != '\0')
{
const char hexstring[5] = {result[i + 1], result[i + 2], result[i + 3], result[i + 4], '\0'};
uint32_t code = (uint32_t)strtol(hexstring, NULL, 16);
printf ("Code = 0x%X\n", code);
uint8_t firstByte = 47;
uint8_t secondByte = 0;
for (size_t i = 1; i < 48; i++)
{
if (unicode[i] > code)
{
firstByte = i - 1;
secondByte = (uint8_t)(code - unicode[i - 1]);
break;
}
}
firstByte |= 0xC0;
secondByte |= 0x80;
resultStr[reIndex++] = (char)firstByte;
resultStr[reIndex++] = (char)secondByte;
i += 4;
}
break;
}
}
else
{
//Error
}
}
else
{
resultStr[reIndex++] = result[i];
}
}
resultStr[reIndex] = '\0';
printf("Result = %s\n", resultStr);
这需要重构并添加一些功能,例如句柄“ \ n”,“ \ t”,“ \ r”,但又轻巧又快速。
有人有更好的主意吗?