您现在的位置是:首页 > 数码 > 

iconv java

2025-07-27 02:32:29
iconv java 我正在尝试使用iconv()将宽字符串转换为UTF-8,使用下面的代码 . 当我运行下面的命令时,iconv调用返回E2BIG,就好像输出缓冲区中没有足够的可用空间字节一样 . 尽管事实上(我认为)我确定了输出缓冲区的大小以承认UTF-8的最坏情况扩展,但仍会发生这种情况 . 实际上,假设输入是一个简

iconv java

我正在尝试使用iconv()将宽字符串转换为UTF-8,使用下面的代码 . 当我运行下面的命令时,iconv调用返回E2BIG,就好像输出缓冲区中没有足够的可用空间字节一样 . 尽管事实上(我认为)我确定了输出缓冲区的大小以承认UTF-8的最坏情况扩展,但仍会发生这种情况 . 实际上,假设输入是一个简单的ASCII“A”编码为wchar_t后跟一个零wchar_t终结符,输出应该是两个字节/字符:一个 A 后跟一个 \ 0 .

我的Linux系统上的 man utf-8 表示UTF-8字节序列的最大长度是6个字节,所以我相信对于2个wchar_ts的输入缓冲区(一个字符后跟空终止符),make(on我的系统)总共8个字节(因为sizeof(wchar_t)== 4),12个字节的缓冲区(2 * UTF8_SEQUECE_MAXLE)就足够了 .

通过实验,如果我将UTF8_SEQUECE_MAXLE增加到16,则iconv的返回值表示成功(15仍然失败) . 但是当我用UTF-8编码时,我无法看到任何wchar_t值会占用如此多的字节 .

我的计算出错了吗? 16字节的UTF-8序列是否可行?我做错了什么?

#include

#include

#include

#include

#define UTF8_SEQUECE_MAXLE 6

/* #define UTF8_SEQUECE_MAXLE 16 */

int

main(int argc, char **ar)

{

wchar_t *wcs = LA;

signed char utf8[(1 /* wcslen(wcs) */  1 /* L \0 */) * UTF8_SEQUECE_MAXLE];

char *iconv_in = (char *) wcs;

char *iconv_out = (char *) &utf8[0];

size_t iconv_in_bytes = (wcslen(wcs)  1 /* L \0 */) * sizeof(wchar_t);

size_t iconv_out_bytes = sizeof(utf8);

size_t ret;

iconv_t cd;

cd = iconv_open(WCHAR_T, UTF-8);

if ((iconv_t) -1 == cd) {

perror(iconv_open);

return EXIT_FAILURE;

}

ret = iconv(cd, &iconv_in, &iconv_in_bytes, &iconv_out, &iconv_out_bytes);

if ((size_t) -1 == ret) {

perror(iconv);

return EXIT_FAILURE;

}

return EXIT_SUCCESS;

}

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/707487.html

相关标签:无
上传时间: 2023-11-21 21:19:53

上一篇:02

下一篇:2

留言与评论(共有 18 条评论)
本站网友 发吧信息网
5分钟前 发表
UTF-8); if ((iconv_t) -1 == cd) { perror(iconv_open); return EXIT_FAILURE; } ret = iconv(cd
本站网友 南京妇科医院排名
11分钟前 发表
iconv java 我正在尝试使用iconv()将宽字符串转换为UTF-8,使用下面的代码 . 当我运行下面的命令时,iconv调用返回E2BIG,就好像输出缓冲区中没有足够的可用空间字节一样 . 尽管事实上(我认为)我确定了输出缓冲区的大小以承认UTF-8的最坏情况扩展,但仍会发生这种情况 . 实际上,假设输入是一个简单的ASCII“A”编码为wchar_t后跟一个零wchar_t终结符,输出应该是两个字节/字符:一个 A 后跟一个 \ 0 . 我的Linux系统上的 man utf-8 表示UTF-8字节序列的最大长度是6个字节,所以我相信对于2个wchar_ts的输入缓冲区(一个字符后跟空终止符),make(on我的系统)总共8个字节(因为sizeof(wchar_t)== 4),12个字节的缓冲区(2 * UTF8_SEQUECE_MAXLE)就足够了 . 通过实验,如果我将UTF8_SEQUECE_MAXLE增加到16,则iconv的返回值表示成功(15仍然失败) . 但是当我用UTF-8编码时,我无法看到任何wchar_t值会占用如此多的字节 . 我的计算出错了吗? 16字节的UTF-8序列是否可行?我做错了什么? #include #include #include #include #define UTF8_SEQUECE_MAXLE 6 /* #define UTF8_SEQUECE_MAXLE 16 */ int main(int argc
本站网友 长沙男科
25分钟前 发表
&iconv_in_bytes
本站网友 应急指挥
19分钟前 发表
iconv java 我正在尝试使用iconv()将宽字符串转换为UTF-8,使用下面的代码 . 当我运行下面的命令时,iconv调用返回E2BIG,就好像输出缓冲区中没有足够的可用空间字节一样 . 尽管事实上(我认为)我确定了输出缓冲区的大小以承认UTF-8的最坏情况扩展,但仍会发生这种情况 . 实际上,假设输入是一个简单的ASCII“A”编码为wchar_t后跟一个零wchar_t终结符,输出应该是两个字节/字符:一个 A 后跟一个 \ 0 . 我的Linux系统上的 man utf-8 表示UTF-8字节序列的最大长度是6个字节,所以我相信对于2个wchar_ts的输入缓冲区(一个字符后跟空终止符),make(on我的系统)总共8个字节(因为sizeof(wchar_t)== 4),12个字节的缓冲区(2 * UTF8_SEQUECE_MAXLE)就足够了 . 通过实验,如果我将UTF8_SEQUECE_MAXLE增加到16,则iconv的返回值表示成功(15仍然失败) . 但是当我用UTF-8编码时,我无法看到任何wchar_t值会占用如此多的字节 . 我的计算出错了吗? 16字节的UTF-8序列是否可行?我做错了什么? #include #include #include #include #define UTF8_SEQUECE_MAXLE 6 /* #define UTF8_SEQUECE_MAXLE 16 */ int main(int argc
本站网友 傲气
20分钟前 发表
&iconv_out_bytes); if ((size_t) -1 == ret) { perror(iconv); return EXIT_FAILURE; } return EXIT_SUCCESS; }
本站网友 长江科学院
9分钟前 发表
&iconv_in_bytes
本站网友 嫦娥四号中继星
8分钟前 发表
UTF-8); if ((iconv_t) -1 == cd) { perror(iconv_open); return EXIT_FAILURE; } ret = iconv(cd
本站网友 热玛吉价格
7分钟前 发表
&iconv_out_bytes); if ((size_t) -1 == ret) { perror(iconv); return EXIT_FAILURE; } return EXIT_SUCCESS; }
本站网友 wps2005
4分钟前 发表
UTF-8); if ((iconv_t) -1 == cd) { perror(iconv_open); return EXIT_FAILURE; } ret = iconv(cd
本站网友 中国快递网
4分钟前 发表
char **ar) { wchar_t *wcs = LA; signed char utf8[(1 /* wcslen(wcs) */  1 /* L \0 */) * UTF8_SEQUECE_MAXLE]; char *iconv_in = (char *) wcs; char *iconv_out = (char *) &utf8[0]; size_t iconv_in_bytes = (wcslen(wcs)  1 /* L \0 */) * sizeof(wchar_t); size_t iconv_out_bytes = sizeof(utf8); size_t ret; iconv_t cd; cd = iconv_open(WCHAR_T
本站网友 宋松
23分钟前 发表
&iconv_in_bytes
本站网友 弹珠汽水
12分钟前 发表
&iconv_in
本站网友 去狐臭
18分钟前 发表
char **ar) { wchar_t *wcs = LA; signed char utf8[(1 /* wcslen(wcs) */  1 /* L \0 */) * UTF8_SEQUECE_MAXLE]; char *iconv_in = (char *) wcs; char *iconv_out = (char *) &utf8[0]; size_t iconv_in_bytes = (wcslen(wcs)  1 /* L \0 */) * sizeof(wchar_t); size_t iconv_out_bytes = sizeof(utf8); size_t ret; iconv_t cd; cd = iconv_open(WCHAR_T
本站网友 日晕
11分钟前 发表
UTF-8); if ((iconv_t) -1 == cd) { perror(iconv_open); return EXIT_FAILURE; } ret = iconv(cd
本站网友 敬老爱老
24分钟前 发表
iconv java 我正在尝试使用iconv()将宽字符串转换为UTF-8,使用下面的代码 . 当我运行下面的命令时,iconv调用返回E2BIG,就好像输出缓冲区中没有足够的可用空间字节一样 . 尽管事实上(我认为)我确定了输出缓冲区的大小以承认UTF-8的最坏情况扩展,但仍会发生这种情况 . 实际上,假设输入是一个简单的ASCII“A”编码为wchar_t后跟一个零wchar_t终结符,输出应该是两个字节/字符:一个 A 后跟一个 \ 0 . 我的Linux系统上的 man utf-8 表示UTF-8字节序列的最大长度是6个字节,所以我相信对于2个wchar_ts的输入缓冲区(一个字符后跟空终止符),make(on我的系统)总共8个字节(因为sizeof(wchar_t)== 4),12个字节的缓冲区(2 * UTF8_SEQUECE_MAXLE)就足够了 . 通过实验,如果我将UTF8_SEQUECE_MAXLE增加到16,则iconv的返回值表示成功(15仍然失败) . 但是当我用UTF-8编码时,我无法看到任何wchar_t值会占用如此多的字节 . 我的计算出错了吗? 16字节的UTF-8序列是否可行?我做错了什么? #include #include #include #include #define UTF8_SEQUECE_MAXLE 6 /* #define UTF8_SEQUECE_MAXLE 16 */ int main(int argc
本站网友 最权威的整形美容医院
24分钟前 发表
&iconv_in
本站网友 masm
6分钟前 发表
&iconv_out