C语言iso8859-1编码与UTF8编码互转,C语言代码实现
时间: 2024-08-16 09:09:07 浏览: 101
在C语言中,ISO-8859-1)是一种单字节字符集,它包含了大部分西欧语言的常用字符,而UTF-8 是一种变长的Unicode 编码,支持全球范围内的字符。
对于简单的ASCII字符(0x00到0x7F),ISO-8859-1 和 UTF-8 是等价的,所以如果你只需要处理这样的字符,无需特殊转换。但是,如果涉及到非ASCII字符,你需要进行编码转换。
这里提供一个简化的示例,展示如何将ISO-8859-1编码转换成UTF-8,注意这只是基本的转换,实际应用中可能需要更复杂和全面的库:
```c
#include <stdio.h>
#include <string.h>
// 将ISO-8859-1字符串转换为UTF-8
char* iso_to_utf8(const char *src) {
unsigned int utf8_len = strlen(src);
char *dst = (char*)malloc(utf8_len * 4); // 估计最坏的情况,每个字符最多3个字节
for (int i = 0; src[i]; i++) {
if (src[i] <= 0x7F) { // ASCII字符,不变
dst[i] = src[i];
} else { // 非ASCII字符,可能是1-4字节
dst[i] = ((src[i] & 0x1F) << 6) | (src[i + 1] >> 2); // 第一部分
if (i + 2 < utf8_len) {
dst[i] |= ((src[i + 1] & 0x03) << 12) | ((src[i + 2] >> 6) & 0x3F); // 后续部分
if (i + 3 < utf8_len) {
dst[i] |= (src[i + 2] & 0x3F); // 最终部分
i++; // 跳过已处理的两个字节
}
}
i++;
}
}
dst[utf8_len] = '\0'; // 添加结束符
return dst;
}
int main() {
const char *iso_str = "你好,世界! 翻译成UTF-8";
char *utf8_str = iso_to_utf8(iso_str);
printf("ISO-8859-1: %s\n", iso_str);
printf("UTF-8: %s\n", utf8_str);
free(utf8_str); // 不忘记释放内存
return 0;
}
```
阅读全文