工作中遇到一个转码的问题,如下代码说话

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 的参数问题的更多相关文章

  1. php iconv 函数参数的区别

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/57 用户输入:英特尔® 酷睿™ i7处理器大显身手 case1 ...

  2. cocos2d-x 显示中文字符和解析XML文件 转载

    源地址:http://codingnow.cn/cocos2d-x/1038.html 在cocos2d-x中直接显示中文的时候会出现乱码,虽然在实际开发中把字符串直接写在代码里也不是好的做法,但是有 ...

  3. iconv: iconv_open(pToCharset, pFromCharset); 的附加参数//IGNORE

    今天在转换一个文件时iconv() 老是返回 -1, 提示编码转换失败. 一共 30 多个文件, 原编码都是一样的,为什么有的转换会失败,返回 -1呢? 网上搜索了一下, 找到一个随加参数: //IG ...

  4. iconv 参数详解

    参数详解: $row [] = iconv('utf-8', 'GB2312//IGNORE', $value['message']); iconv ( string $in_charset , st ...

  5. 「post中文参数问题」以及「验证码自动识别备忘」

    前言 之前搞过几次模拟登录,都是模拟 post 后取到 cookie,之后便能用这个 cookie 愉快玩耍.这次碰到了验证码,其实只需手动登录一次,手动取到 cookie 后也能玩耍,不过 cook ...

  6. php配置参数.md

    php 5.5 配置文件 php.ini Options user_ini.filename string 设定了 PHP 会在每个目录下搜寻的文件名:如果设定为空字符串则 PHP 不会搜寻.默认值是 ...

  7. 不封装ajax 带url参数调用接口

    html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  8. Qt5.7.0配置选项(configure非常详细的参数)

    configure是一个命令行工具,用于配置Qt编译到指定平台.configure必须运行于Qt源码根目录.当运行configure时,编译源码使用的是所选工具链中的make工具. 一.源码目录.编译 ...

  9. poco json 中文字符,抛异常JSON Exception -->iconv 转换 备忘录。

    起因 最近linux服务器通信需要用到json. jsoncpp比较出名,但poco 1.5版本以后已经带有json库,所以决定使用poco::json(linux 上已经用到了poco这一套框架). ...

随机推荐

  1. HDU 2147 (博弈) kiki's game

    无奈英语不好又被坑,看到棋子能左移下移左下移,想当然地以为是Wythoff博弈了,=u= 题的意思是说每次只能选一个方向移动一步,所以找找规律就是横纵坐标为奇数的时候是必败状态. 从http://ww ...

  2. Asp.Net验证码1

    验证码html调用 验证码:<input name="> <img src="CodeHandler.ashx" id="imgCode&qu ...

  3. .net4.0下 解决asp.net中“从客户端中检测到有潜在危险的Request.Form值”的错误

    asp.net 2.0 通常解决办法 方案一: 将.aspx文件中的page项添加ValidateRequest="false" ,如下: <%@ Page Validate ...

  4. 菜鸟学习笔记2,$(document).ready()使用讨论

    $(document).ready()使用讨论 $(document).ready()  一.先为说说 $(document).ready() 的功能: 1. JQuery API对 $(docume ...

  5. QCon 2015 阅读笔记 - 移动开发最佳实践

    所有ppt下载地址:http://pan.baidu.com/s/1mg9o4TM 下面是移动开发实践部分的阅读笔记. 移动开发网络性能优化实践 - 陈浩然 (携程) 携程是非常标准的移动App架构, ...

  6. php里少用到的session_module_name,以及session的key值限制,简单将session存储为json格式数据的方法

    这个函数的作用就是动态的设置php.ini里的session_save_handler,配合session_set_savepath可以在程序里自由配置session的后台方式. session_ca ...

  7. 如何在vmware上创建共享磁盘

    1.先在你本机的vmware安装目录上找到 vmware-vdiskmanager.exe 执行文件. 我的目录是 d:\vmware\vmware-vdiskmanager.exe 再用cmd终端( ...

  8. Hadoop学习总结之五:Hadoop的运行痕迹

    Hadoop学习总结之五:Hadoop的运行痕迹   Hadoop 学习总结之一:HDFS简介 Hadoop学习总结之二:HDFS读写过程解析 Hadoop学习总结之三:Map-Reduce入门 Ha ...

  9. 下载个jquery-easyui-1.3.0使用,把他导入到myeclipse10里,jquery-1.7.2.min.js报错。 错误如下, Syntax error on token "Invalid Regular Expression Options", no accurate correc

    1.选中报错的jquery文件“jquery-1.2.6.min.js”.2.右键选择 MyEclipse-->Exclude From Validation .3.再右键选择 MyEclips ...

  10. mate代码详解

    1.用以说明生成工具(如MICROSOFT FRONTPAGE 4.0)等: 2.向搜索引擎说明你的网页的关键词: 3.告诉搜索引擎你的站点的主要内容: 4.告诉搜索引擎你的站点的制作的作者: 5. ...