windows下使用aspera_vlc windows

windows下使用aspera_vlc windows资源下载官网资源:https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz环境配置编译环境:Win764位系统VS2015创建一个VS2015项目,应用程序类型使用静态库,注意取消勾选“使用预编译头”;将资源[libiconv-1.16\lib]文件夹下的所有文件,全部复制到第一步创建的工程目录下,并找到config.h….

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

资源下载

官网资源: https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz
CSDN资源:https://download.csdn.net/download/hhhuang1991/11979866
VS2015配置项目+测试代码

环境配置

编译环境:Win7 64位系统 VS2015

  1. 创建一个VS2015项目,应用程序类型使用静态库,注意取消勾选“使用预编译头”;
  2. 将资源[libiconv-1.16\lib]文件夹下的所有文件,全部复制到第一步创建的工程目录下,并找到config.h.in文件,将后缀.in去掉;
  3. 将资源[libiconv-1.16\include]文件夹下的iconv.h.in,复制到工程目录下,并将后缀.in去掉;
  4. 将资源[libiconv-1.16\libcharset\lib]文件夹下的localcharset.c,复制到工程目录下;
  5. 将资源[libiconv-1.16\libcharset\include]文件夹下的localcharset.h.in,复制到工程目录下,并将后缀.in去掉;
  6. 将资源[libiconv-1.16\include]文件夹下的iconv.h.in,复制到工程目录下,并将后缀.in去掉;
  7. iconv.clocalcharset.c文件加载到工程中;
  8. 直接编译工程。

异常排除

  1. iconv.c文件中#include <config.h>改为#include "iconv.h"
    localcharset.c文件中#include <config.h>改为#include "config.h"
 fatal error C1083: 无法打开包括文件: “config.h”: No such file or directory
 fatal error C1083: 无法打开包括文件: “iconv.h”: No such file or directory

Jetbrains全家桶1年46,售后保障稳定

  1. 找到iconv.h文件中,所有带@符号的字符串都要去掉@或屏蔽:
Line21,@DLL_VARIABLE@改为/*@DLL_VARIABLE@*/
Line82,@ICONV_CONST@改为const
Line100, @USE_MBSTATE_T@改为USE_MBSTATE_T
Line101,@BROKEN_WCHAR_H@改为BROKEN_WCHAR_H
Line121, @USE_MBSTATE_T@改为 USE_MBSTATE_T
Line168,@HAVE_WCHAR_T@改为HAVE_WCHAR_T
  1. 找到localcharset.c文件中的sprintf函数,全部替换成安全类型的函数sprintf_s

Demo

  1. 编译上面工程,将会生成静态库libiconv.lib。
  2. 创建一个测试工程。将iconv.h和库文件libiconv.lib拷贝到测试工程目录下,测试代码如下,
#include "stdafx.h" 
#include "..\libiconv\iconv.h"
#pragma comment(lib, "..\\Debug\\libiconv.lib")
#include <iostream>
using namespace std;
int main()
{ 
   
     // 将GBK编码的字串,转成UTF-8编码的字
     iconv_t cd = iconv_open("UTF-8", "GBK"); 
     if ((iconv_t)-1 == cd)  
     { 
   
	 if (EINVAL == errno)
	 { 
   
	   cerr << "The conversion from fromcode to tocode is not supported by the implementation" << endl;
	 }
	 else { 
   
	   cerr << "iconv_open fail!" << endl;
	 }
	  return -1;
     }
     
     // 将转换描述符cd中的转换状态恢复成初始化状态,方法是iconv中的inbuff参数设置成NULL
     iconv(cd, NULL, NULL, NULL, NULL);
     // 将GBK编码的"啊"转成UTF-8编码
     char * inbuff = new char[64];
     memset(inbuff, 0, sizeof inbuff);
     char *outbuff = new char[64];
     memset(outbuff, 0, sizeof outbuff);
     
     // "啊"的GBK编码为0xB0A1,UTF-8编码为0xE2 0x80 0x9C
     inbuff[0] = 0xA1;
     inbuff[1] = 0xB0;
     char * inptr = inbuff;   // 为什么要设置这个中间指针inptr,而不支持采用 inbuff?因为iconv会改变指针inbuff的值,这样在删除内存时delete[] inbuff,将会出错
     size_t insize = 2;
     char * outptr = outbuff;  // 作用与inptr类似
     size_t outsize = 64;
     char *save = new char[64];
     memset(save, 0, sizeof save);
     size_t outsave = 0;
     
     // 资料介绍,iconv每次只转换一个多字节字符。但是经过测试,只要内容是正常,都是一次转换完,不明白其中缘由。
     size_t ret = iconv(cd, (const char **)&inptr, &insize, &outptr, &outsize);
     if ((size_t)-1 == ret) { 
   
        if (E2BIG == errno) { 
   
            cerr << "There is not sufficient room at *outbuf." << endl;
        }
        else if (EILSEQ == errno) { 
   
            cerr << "An invalid multibyte sequence has been encountered in the input." << endl;
        }
        else if (EINVAL == errno) { 
   
            cerr << "An incomplete multibyte sequence has been encountered in the input." << endl;
        }
        goto TestFinished;
     }
     else { 
   
        outsave = 64 - outsize;
        memcpy(save, outptr - outsave, outsave);   // 此处采用memcpy而不采用strcpy的目的是,当ACSII类型字符转换到UCS2类型时,会产生0x00的字符,使用strcpy复制会在此处截断,导致内容丢失
     }
     cout << "successed." << endl;
TestFinished:
     delete[] inbuff;
     delete[] outbuff;
     delete[] save;
     iconv_close(cd);
     getchar();
     return 0;
  }
	
	

参考资源

iconv_open
iconv

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234978.html原文链接:https://javaforall.net

(0)
上一篇 2025年5月22日 下午8:22
下一篇 2025年5月22日 下午9:01


相关推荐

  • 计算机插了网线缺连不了网络,网线连不上网怎么回事_为什么网线插电脑上不了网-win7之家…

    计算机插了网线缺连不了网络,网线连不上网怎么回事_为什么网线插电脑上不了网-win7之家…当我们在使用有线网络的时候,都需要在电脑中插入网线才可以,但是有不少用户却遇到网线连不上网的情况,为什么网线插电脑上不了网呢?导致这样问题的原因有很多,为了帮助到大家,现在给大家讲解一下网线连不上网的几种解决方法,一起来看看吧。具体步骤如下:1、电脑插上网线却连不上网首先可能是网线接触不良导致的,可以将网线的两端拔下来重新连接再试试看能不能连上网,或者查看一下网线有无破损,将网线放在其他电脑上连接…

    2022年6月26日
    43
  • 利用随机森林对特征重要性进行评估

    利用随机森林对特征重要性进行评估随机森林是以决策树为基学习器的集成学习算法 随机森林非常简单 易于实现 计算开销也很小 更令人惊奇的是它在分类和回归上表现出了十分惊人的性能 因此 随机森林也被誉为 代表集成学习技术水平的方法 本文是对随机森林如何用在特征选择上做一个简单的介绍

    2026年3月26日
    2
  • java转换字符串为时间_JAVA字符串转日期或日期转字符串

    java转换字符串为时间_JAVA字符串转日期或日期转字符串文章中,用的API是SimpleDateFormat,它是属于java.text.SimpleDateFormat,所以请记得import进来!用法:SimpleDateFormatsdf=newSimpleDateFormat(“yyyy-MM-ddHH:mm:ss”);这一行最重要,它确立了转换的格式,yyyy是完整的公元年,MM是月份,dd是日期,至于HH:mm:ss…

    2022年5月6日
    333
  • Lombok插件的安装和使用「建议收藏」

    Lombok插件的安装和使用「建议收藏」IDEA中安装Lombok插件打开IDEA的Setting–&amp;amp;gt;选择Plugins选项–&amp;amp;gt;选择Browserepositories–&amp;amp;gt;搜索lombok–&amp;amp;gt;点击安装–&amp;amp;gt;安装完成重启IDEA–&amp;amp;gt;安装成功后重启IDEA引入lombok的jar包&amp;amp;lt;dependency&

    2025年9月7日
    7
  • matlab画时域和频谱图_信号的频域分析及matlab实现

    matlab画时域和频谱图_信号的频域分析及matlab实现随机振动信号分析方法总结信号处理(信号滤波、时频域分析、神经网络、寿命预测)一、时域分析时域分析特征包括均值、方差、峭度、峰峰值等;振动信号降噪结果分析:对于去噪效果好坏的评价,常用信号的信噪比(SNR)、估计信号同原信号的均方根误差(RMSE)来判断。SNR越高则说明混在信号里的噪声越小,否则相反。RMSE的计算值越小则表示去噪效果越好。信噪比定义:均方根误差定义:二、频域分析三、时频联合域分析(JointTime-FrequencyAnalysis,JTFA)即时频分析,

    2022年10月15日
    3
  • 点到平面的距离公式的推导

    点到平面的距离公式的推导点到平面的距离公式准备知识平面的一般式方程 Ax By Cz D 0 其中 n A B C 是平面的法向量 D 是将平面平移到坐标原点所需距离 所以 D 0 时 平面过原点 向量的模 长度 给定一个向量 V x y z 则 V sqrt x x y y z z 向量的点积 内积 给定两个向量 V1 x1 y1 z1 和 V2

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号