我想将一个32位的值,它代表一个Unicode码点,转换成一串只包含对应字符的utf-8编码字符串的
例如,我想将值
我尝试使用
当我运行它时,只有一个换行符被打印出来(
char
序列。例如,我想将值
955
转换成utf-8编码字符串"λ"
。我尝试使用
iconv
来实现这个目标,但我没有得到期望的结果。以下是我编写的代码:#include <stdio.h>
#include <iconv.h>
#include <stdint.h>
int main(void)
{
uint32_t codepoint = U'λ';
char *input = (char *) &codepoint;
size_t in_size = 2; // lower-case lambda is a 16-bit character (0x3BB = 955)
char output_buffer[10];
char *output = output_buffer;
size_t out_size = 10;
iconv_t cd = iconv_open("UTF-8", "UTF-32");
iconv(cd, &input, &in_size, &output, &out_size);
puts(output_buffer);
return 0;
}
当我运行它时,只有一个换行符被打印出来(
puts
自动打印一个换行符,-- outout_buffer
的第一个字节是 '\0'
)。我的理解或实现有什么问题吗?
iconv_open
函数的参数顺序为目标编码,源编码。 - Ry-