打印 wchar_t 类型的字符:
由于 wchar_t 类型涉及到多字节编码,可以使用宽字符输出函数来打印 wchar_t 类型的字符,例如 wprintf 或 putwchar。
以 UTF-8 编码为例,可以使用 wprintf 函数打印一个 wchar_t 类型的字符:
于 wchar_t 类型的字符,在打印之前需要调用 setlocale 函数来设置本地化环境,以确保宽字符输出函数能够正常工作。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>
void printUnicodeHexString(const wchar_t* unicodeStr) {
for (int i = 0; unicodeStr[i] != L'\0'; i++) {
printf("%04x ", (unsigned int)unicodeStr[i]);
}
printf("\n");
}
int main()
{
setlocale(LC_ALL, ""); // 设置本地化环境
char input[] = "你好";
printf(" : %s\n",input);
wchar_t *output;
int charCount = strlen(input) + 1; // 包括终止符 '\0'
int wcharCount = mbstowcs(NULL, input, 0); // 获取转换后的 wchar_t 数组的元素个数
//wchar_t *output = malloc(wcharCount * sizeof(wchar_t)); // 分配存储空间
output = malloc(wcharCount * sizeof(wchar_t)); // 分配存储空间
mbstowcs(output, input, charCount); // 进行转换
wprintf(L">L:%ls\n", output); // 打印转换后的字符数组
printUnicodeHexString(output);
free(output); // 释放内存
return 0;
}
以上代码问题Linux c中printf 和 wprintf 不能同时使用。
printf 函数是用于在标准输出流上输出格式化字符串的函数,它不直接支持打印宽字符 (wchar_t) 字符串。对于打印宽字符字符串,你需要使用 wprintf 函数。
链接: 在线中文转Unicode