iconv 的参数问题
工作中遇到一个转码的问题,如下代码说话
void encode_convert(iconv_t& cd, const char* str, size_t str_len,
std::string* out)
{
char utf_buf[kMaxCoding] = {};
char* pout = utf_buf;
char* pin = const_cast<char*>(str);
size_t from_len = str_len;
size_t to_len = sizeof(utf_buf);
if (iconv(cd, &pin, &from_len, &pout, &to_len) == (size_t) -)
{
fprintf(stderr, "convert for %s", str);
}
out->assign(utf_buf);
}
这段代码没问题,运行得很好,但后来 kMaxCoding 定义在其它文件中了,所以我把它作为参数传递过来了,但编译无法过。
只能修改成为这样
void encode_convert(iconv_t& cd, const char* str, size_t str_len,
std::string* out, const size_t max_coding_size)
{
char utf_buf[max_coding_size];
utf_buf[] = '\0'; //trick
char* pout = utf_buf;
char* pin = const_cast<char*>(str);
size_t from_len = str_len;
size_t to_len = sizeof(utf_buf);
if (iconv(cd, &pin, &from_len, &pout, &to_len) == (size_t) -)
{
fprintf(stderr, "convert for %s", str);
}
out->assign(utf_buf);
}
但此时就会在转换后的string中多一个y 字符串。
如果将标黄的代码转换为 memset(utf_buf, 0, sizeof(utf_buf));就会没问题了,我想应该是转码可能没有加\0什么的。
在查看了 在Linux下使用iconv转换字符串编码 的iconv接口函数说明后,我将assign 段修改为
out->assign(utf_buf, sizeof(utf_buf) - to_len);
清净了。
iconv 的参数问题的更多相关文章
- php iconv 函数参数的区别
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/57 用户输入:英特尔® 酷睿™ i7处理器大显身手 case1 ...
- cocos2d-x 显示中文字符和解析XML文件 转载
源地址:http://codingnow.cn/cocos2d-x/1038.html 在cocos2d-x中直接显示中文的时候会出现乱码,虽然在实际开发中把字符串直接写在代码里也不是好的做法,但是有 ...
- iconv: iconv_open(pToCharset, pFromCharset); 的附加参数//IGNORE
今天在转换一个文件时iconv() 老是返回 -1, 提示编码转换失败. 一共 30 多个文件, 原编码都是一样的,为什么有的转换会失败,返回 -1呢? 网上搜索了一下, 找到一个随加参数: //IG ...
- iconv 参数详解
参数详解: $row [] = iconv('utf-8', 'GB2312//IGNORE', $value['message']); iconv ( string $in_charset , st ...
- 「post中文参数问题」以及「验证码自动识别备忘」
前言 之前搞过几次模拟登录,都是模拟 post 后取到 cookie,之后便能用这个 cookie 愉快玩耍.这次碰到了验证码,其实只需手动登录一次,手动取到 cookie 后也能玩耍,不过 cook ...
- php配置参数.md
php 5.5 配置文件 php.ini Options user_ini.filename string 设定了 PHP 会在每个目录下搜寻的文件名:如果设定为空字符串则 PHP 不会搜寻.默认值是 ...
- 不封装ajax 带url参数调用接口
html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- Qt5.7.0配置选项(configure非常详细的参数)
configure是一个命令行工具,用于配置Qt编译到指定平台.configure必须运行于Qt源码根目录.当运行configure时,编译源码使用的是所选工具链中的make工具. 一.源码目录.编译 ...
- poco json 中文字符,抛异常JSON Exception -->iconv 转换 备忘录。
起因 最近linux服务器通信需要用到json. jsoncpp比较出名,但poco 1.5版本以后已经带有json库,所以决定使用poco::json(linux 上已经用到了poco这一套框架). ...
随机推荐
- 【Android】 PopupWindow使用小结
PopupWindow的很多用法网上比较多,我就不做过多解释了,只说下可能会遇到的问题,以及解决办法: 1.PopupWindow中的listview无响应 这个主要是因为show写在了set ...
- HDU 2830 Matrix Swapping II
给一个矩阵,依然是求满足条件的最大子矩阵 不过题目中说任意两列可以交换,这是对题目的简化 求出h数组以后直接排序,然后找出(col-j)*h[j]的最大值即可(这里的j是从0开始) 因为排序会影响到h ...
- UVa 673 Parentheses Balance【栈】
题意:输入一个包含"()"和"[]"的序列,判断是否合法 用栈来模拟,遇到"(",“[”就入栈,遇到')',']'就取出栈顶元素看是否匹配, ...
- Asp.Net正则获取页面a标签里的内容
Asp.Net正则获取页面a标签里的内容 string url = "http://www.114369.com"; string html = MyCLib.NetClass.S ...
- mysql,多表的内外连接+子查询
表: student house course 关系:student_course 多对多 student house 多对一 需求:查询房间1 的学生 都学习了什么课程 select s.s_nam ...
- ecshop文章详情页显示浏览数
1.后台执行以下SQL语句 ) NOT NULL 2.找到article.php的这段代码 else { $smarty->display('article_pro.dwt', $cache_i ...
- HDU Sky数 2097
解题思路:类比求出10进制数各个位上的数字之和,求出12进制和16进制上的数. #include<cstdio> #include<cstring> #include<a ...
- SAS使用SPD引擎并报Encoding错误
ERROR: Unable to open data file because its file encoding differs from the SAS session encoding and ...
- 深入学习Heritrix---解析CrawlController(转)
当我们以Web UI方式使用Heritrix时,点击任务开始(start)按钮时,Heritrix就开始了它的爬取工作.但它的内部 执行流程是怎样的呢?别急,下面将慢慢道来. (一)CrawlJobH ...
- MySQL server has gone away 的解决方法
原文引用至:http://www.jb51.net/article/23781.htm,感谢! 可能原因:1.发送的SQL语句太长,以致超过了max_allowed_packet的大小,如果是这种原因 ...