《libiconv字符集转换库使用方法》一文中说到了libiconv可以实现不同字符集的转换。比如GBK转BIG5等。在项目中因为需要,找到这个库。可是这个库在C#中没有很好的支持。不过,想着既然是C++的库,那只要动态加载DLL的接口就好了。可是调用并不顺利,传进去的IntPtr或者byte数组总是拿不到数据。后面回到了C++的方式去调用,几经调试,总算找到了原因。

是iconv接口在转换完成后,指针的位置往后移了。而在C#中调用DLL后回来的指针,已经是移动后的,所以拿不到所要的数据。

经过多种尝试,没有办法将指针移回到原位。

后来,通过C++的二次封装,在C++中将指针的位置移到了原来的位置,再用C#来调用,总算达到了目的。

#include

//包函 libiconv库头文件

#include "iconv.h"

//导入 libiconv库

#pragma comment(lib,"libiconv.lib")

using namespace std;

#define DLL_EXPORT extern "C" __declspec(dllexport)

DLL_EXPORT int ChangeCode( const char* pFromCode,

const char* pToCode,

const char* pInBuf,

size_t* iInLen,

char* pOutBuf,

size_t* iOutLen )

{

size_t outLenTemp=*iOutLen;

iconv_t hIconv = iconv_open( pToCode, pFromCode );

if ( -1 == (int)hIconv )

{

return  -100;//打开失败,可能不支持的字符集

}

//开始转换

int iRet = iconv( hIconv, (const char**)(&pInBuf), iInLen, (char**)(&pOutBuf), iOutLen );

if (iRet>=0)

{

pOutBuf=pOutBuf-(outLenTemp-*iOutLen);//转换后pOutBuf的指针被移动,必须移回到起始位置

}

else

{

iRet=-200;

}

//关闭字符集转换

iconv_close( hIconv );

return iRet;

}

C#调用的部分

///

/// 字符器转换.

/// 每次转换都需要打开转换器、字符集转换、关闭转换器。

///

/// 源字符集编码

/// 目标字符集编码

/// 待转换的内容

/// 待转换的长度。转换成功后,将变成0.

/// 转换后的内容

/// 转换长度。转换成功后,将变成原值减去转换后的内容所占空间的长度

///

[DllImport("CharsetConvert.dll", CallingConvention = CallingConvention.Cdecl)]

public static extern int ChangeCode(string pFromCode,

string pToCode,

byte[] pInBuf,

ref int iInLen,

byte[] pOutBuf,

ref int iOutLen);

private void buttonOneConvert_Click(object sender, EventArgs e)

{

string toCode = "BIG5";

string fromCode = "GBK";

string inStr = "國k";

byte[] inBuf = Encoding.Default.GetBytes(inStr);

byte[] outBuf = new byte[100];

int inLen = inBuf.Length;

int outLen = outBuf.Length;

int result = CharsetConvter.ChangeCode(fromCode, toCode, inBuf, ref inLen, outBuf, ref outLen);

if (result < 0)

{

MessageBox.Show("转换失败");

}

else

{

String outStr = Encoding.GetEncoding("BIG5").GetString(outBuf);

MessageBox.Show(outStr);

}

}

C语言libiconv编程,libiconv字符集转换库在C#中的使用相关推荐

  1. libiconv字符集转换库在C#中的使用

    <libiconv字符集转换库使用方法>一文中说到了libiconv可以实现不同字符集的转换.比如GBK转BIG5等.在项目中因为需要,找到这个库.可是这个库在C#中没有很好的支持.不过, ...

  2. libiconv字符集转换库使用方法

    在软件开发中不可避免的需要用到字符集的转换:转换方法很多如自行编写字符集转换库.利用Windows提供之MultiByteToWideChar函数等:自行编写相对周期较长,而利用MultiByteTo ...

  3. 使用iconv编程进行字符集转换

    使用iconv编程进行字符集转换 摘自:https://www.cnblogs.com/lancidie/archive/2013/04/12/3016965.html Linux上进行编码转换时,既 ...

  4. 河科大c语言上机实验答案,2016年河南科技学院信息工程学院C语言上机编程考研复试题库...

    一.选择题 1. 以下选项中,能用作数据常量的是( ). 答:D [解析]A 项错误,十六进制数用数学0和字符x (或大写字母X )开头:B 项错误,八进制整数常量以数字0开始,有效数字为0〜7; C ...

  5. mysql 数据库字符集转换_字符集介绍及mysql数据库编码转换

    一.字符集介绍: 1.ASCII ASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会( ...

  6. C语言经典编程(浙大版C语言第三版)详解

    C语言经典编程详解 – 一览表: 1.[C语言经典编程]练习2-1 Programming in C is fun! (5分) 2.[C语言经典编程]练习2-3 输出倒三角图案 (5分) 3.[C语言 ...

  7. c语言面向对象编程显示,c语言面向对象编程

    场景:C语言面向对象编程(6):配置文件解析 C语言面向对象编程(六):配置文件解析 在实际项目中,经常会把软件的某些选项写入配置文件. Windows 平台上的 INI 文件格式简单易用,本篇文章利 ...

  8. c语言 iconv函数,libiconv的介绍

    查看原文 http://www.gnu.org/software/libiconv/ 由于历史原因,国际上的各国文字都是依赖于自己本国语言而编码的.后来,随着Internet的出现和各国之间逐渐频繁的 ...

  9. 二级c语言编程题只要得出答案,计算机二级C语言考试编程题题库答案.docx

    计算机二级C语言考试编程题题库答案 1.求100之内自然数中最大的能被17整除的数.void main(){ int i;for(i=100;i>0;i--)if(i%17==0)break;p ...

  10. java 168转换成861_java实验-java语言面向对象编程基础

    java实验-java语言面向对象编程基础 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 8.90 积分 广州大学学生实验报告广州大学学生实验报告 ...

最新文章

  1. spoj BCEASY - Bottom Coder (Easy)
  2. 微服务实战(三):深入微服务架构的进程间通信
  3. BugkuCTF-Misc:多彩
  4. 抑郁症自测量表测试软件,快来测测抑郁--抑郁自评量表 (此表是是收费工具,我献给大家)...
  5. php restful规范,RESTFul API规范 详细指南
  6. 书评– Kubernetes Up&Running,作者:Kelsey Hightower
  7. sql查询字段的值不为空
  8. 计算机重启是什么原因,电脑自动重启,该怎么办,到底是什么原因,我来详细说明?...
  9. 4015-基于递归的折半查找(C++)
  10. [ACM_数据结构] Color the ball [线段树水题][数组开大]
  11. 使用R7版NDK搭建Android开发环境[不使用Cgywin]
  12. Matlab系列教程_数值计算_求和(积)_求累加(积)
  13. npm下载以来版本问题 npm ERR! code ERESOLVE
  14. 软件项目管理流程小结
  15. EMI原理、测量、解决
  16. 原生Android开发自学过程(一)
  17. 微博数据解析:国产彩妆品牌对比 | 完美日记 VS 花西子
  18. 光是无限远服务器的花海,第21次云垂纵横计划服务器互通投票结果公告
  19. 插入u盘有图标但计算机没盘,电脑没插u盘却有u盘图标显示如何解决
  20. 重磅!图灵奖,公布!

热门文章

  1. panabit 流控大师
  2. 应用随机过程_《常见随机过程》(目录)
  3. 最全总结 | 聊聊 Python 数据处理全家桶(Sqlite篇)
  4. BackTrack4——利用***测试保证系统安全
  5. 蓝桥杯官网 试题 PREV-253 历届真题 质数行者【第十一届】【决赛】【研究生组】【C++】【Java】两种解法
  6. 基于QT实现简单的音乐播放器
  7. 基于Python的简单数据挖掘
  8. java jstl 库下载_jar包下载,jstl.jar和standard.jar下载
  9. Dreamweaver8 V8.0.0.2766
  10. cmd 文本文件分割_通过split命令分割大文件