所以我正在尝试阅读一封电子邮件,它是用带引号的可打印内容编码的,因此包含例如:
=C3=B6
应该转换成
ö
所以我知道 c3b6 是 utf-8
值 ö
的十六进制表示,但我无法真正理解如何转换 char * str = '=C3=B6'
转换为 char * str 'ö'
。
我使用的是 Linux,但会将代码移植到 Windows,因此我需要一个多平台解决方案。
我该怎么做?
最佳答案
一些让OP开始的东西。
解析字符串"=C3=B6"
,查找 2 个字节作为十六进制字符。然后形成一个要打印的字符串(并希望 printf
能够解释为 UTF-8) - 与 printf("%s", ...)
兼容的编译器具有“无特殊”针对多字节字符做出了规定”。 YMMV .
#include "stdio.h"
int main() {
char * str = "=C3=B6";
printf("%s\n", str);
printf("1 %s\n", "ö");
printf("2 %s\n", "\xC3\xB6");
unsigned char a[3] = { 0 };
if (sscanf("=c3=b6", "=%hhx=%hhx", &a[0], &a[1]) == 2) {
printf("3 %s\n", a);
}
return 0;
}
输出
=C3=B6
1 ö
2 ö
3 ö
关于将 =C3=B6 转换为 ö 假设 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54333893/