将 =C3=B6 转换为 ö 假设 UTF-8

标签 c utf-8

所以我正在尝试阅读一封电子邮件,它是用带引号的可打印内容编码的,因此包含例如:

=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/

相关文章:

将数组表示法转换为指针表示法

c - 行首有输出时为“readline”

Python 不接受 UTF-8 编码

java - 日期在Java中的非英语操作系统中即将到来

c - libxml2 htmlSaveFileEnc 将 utf8 字符保存为 Г

C代码无法编译

c - 为什么使用 fopen 很重要?

CS50 Pset5 check() 将太多单词视为拼写错误

python - 语法错误 : Non-UTF-8 code starting with '\xd8' in file

mysql - CakePHP 在许多 "SET CHARACTER SET utf8"查询中找到调用结果。为什么?