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这一套框架). ...
随机推荐
- listview android:cacheColorHint,android:listSelector属性作用
ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉, 原因是,滚动时,列表里面的view重绘时,用 ...
- [ionic开源项目教程] - 第2讲 新建项目,配置app.js和controllers.js搭建基础视图
新建项目 由项目功能架构图选择合适的页面架构,这里选用Tab,ionic新建项目,默认的模板就是tab. $ ionic start TongeNews Creating Ionic app in f ...
- HTML元素margin、padding的默认值
HTML元素margin.padding的默认值 element margin(单位像素) padding html 0 0 body 8 0 div 0 0 h1 21 0 h2 19 0 19 0 ...
- zipline
history 多只股票时会返回某几只股票停牌没数据 if not symbol(stock) in data: 聚宽 多只股票如果某几只没有发行 600485: nan 多只股票如果某几只停牌 60 ...
- JProfiler 使用说明
一个全功能的 Java 剖析工具( profiler ),专用于分析 J2SE 和 J2EE 应用程序.它把 CPU .执行绪和内存的剖析组合在一个强大的 应用中. JProfiler 可提供许多 I ...
- wx处理鼠标事件
#include "MainFrame.h" BEGIN_EVENT_TABLE(MyFrame,wxFrame) EVT_LEFT_DOWN(MyFrame::OnMouseLe ...
- log4j配置文件详细解释
web.xml中配置启动log4j的配置 <!-- webAppRootKey进行配置,这里主要是让log能将日志写到对应项目根目录下 --> <!-- 定义以后,在Web Cont ...
- 为什么要用Java泛型
啥是泛型? 泛型(generic)是指参数化类型的能力.可以定义带泛型类型的类或方法,随后编译器会用具体的类型来代替它. 举个栗子 上述代码在编译期没有问题,但在运行期,将会报错.就是因为List的a ...
- 【转】在Eclipse中使用PyDev进行Python开发
原文网址:http://www.crifan.com/eclipse_use_pydev_develop_python/ 在折腾: [记录]使用Python的IDE:Eclipse+PyDev 的过程 ...
- 【转】Linux设备驱动之I/O端口与I/O内存
原文网址:http://www.cnblogs.com/geneil/archive/2011/12/08/2281367.html 一.统一编址与独立编址 该部分来自于:http://blog.ch ...