1. 程式人生 > >CentOS下UTF8和GBK的互轉

CentOS下UTF8和GBK的互轉

忘記轉自哪裡了,自己做了下測試感覺好用,記一下。

我在windows下新建Source.cpp

#include <iconv.h>  
#include <stdlib.h>  
#include <stdio.h>  
#include <unistd.h>  
#include <fcntl.h>  
#include <string.h>  
#include <sys/stat.h>  

/*
Title: Convert code between utf-8 and gbk
Date:2016-02-01
Test Environment:
[1]CentOS 6.5 64bits
[2]libiconv 1.14
Prerequisite:
[1]使用下面的命令
locale -a|grep zh_CN
檢視下面的資訊是否存在
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8
*/

int code_convert(char *from_charset, char *to_charset, char *inbuf, size_t inlen,
	char *outbuf, size_t outlen) {
	iconv_t cd;
	char **pin = &inbuf;
	char **pout = &outbuf;

	cd = iconv_open(to_charset, from_charset);
	if (cd == 0)
		return -1;
	memset(outbuf, 0, outlen);
	if (iconv(cd, pin, &inlen, pout, &outlen) == -1)
		return -1;
	iconv_close(cd);
	*pout = '\0';

	return 0;
}

int u2g(char *inbuf, size_t inlen, char *outbuf, size_t outlen) {
	return code_convert("utf-8", "gb2312", inbuf, inlen, outbuf, outlen);
}

int g2u(char *inbuf, size_t inlen, char *outbuf, size_t outlen) {
	return code_convert("gb2312", "utf-8", inbuf, inlen, outbuf, outlen);
}

int main(void) {
	char *s = "中國";
	int fd = open("test.txt", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
	char buf[10];
	g2u(s, strlen(s), buf, sizeof(buf));
	write(fd, buf, strlen(buf));
	close(fd);

	fd = open("test.txt2", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
	char buf2[10];
	u2g(buf, strlen(buf), buf2, sizeof(buf2));
	write(fd, buf2, strlen(buf2));
	close(fd);
	return 1;
}


然後,通過CMake移到CentOS上測試通過

project(GBK2UTF8)  

cmake_minimum_required(VERSION 2.8)  

SET( CMAKE_VERBOSE_MAKEFILE ON )  

#For search iconv
INCLUDE_DIRECTORIES(/usr/local/include)
LINK_DIRECTORIES(/usr/local/lib)

#  
aux_source_directory(. DIR_SRCS)  

add_executable(GBK2UTF8 ${DIR_SRCS})      

TARGET_LINK_LIBRARIES(GBK2UTF8 iconv)


相關推薦

CentOSUTF8GBK

忘記轉自哪裡了,自己做了下測試感覺好用,記一下。 我在windows下新建Source.cpp #include <iconv.h> #include <stdlib.h> #include <stdio.h> #includ

C++ UTF8UTF16代碼

define iter 般的 != ont for efault 互轉 小端 簡介 1、這段代碼只考慮在小端序情況下的轉換(一般的機器都是的)。2、這段代碼需要C++11的支持(只是用到了u16string),如果不支持,可以添加下面代碼 typedef uin

utf8ucs2

 UFT8和UCS2互轉效API使用進行拆分字數如圖 /* * 函式: * utf8_to_ucs2(utf8轉ucs2) * 引數: * utf8:utf8資料 * utf8_lenght:utf8資料長度 * ucs2:儲存ucs2資料空間

ROScv_bridgeopencv

參看roswiki:http://wiki.ros.org/cv_bridge/Tutorials/UsingCvBridgeToConvertBetweenROSImagesAndOpenCVImages注意其中的原始碼編譯好後,在執行時,要輸入視訊流public:  Im

c中實現utf8gbk

#include <iconv.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include &

utf8 gbk

bst encoding urn sta function str public log odi public static function utf8_to_gbk($utfstr) { return iconv("utf-8", "gbk//IGNOR

Linux入門(13)——Ubuntu16.04將圖片pdf

Ubuntu16.04下將圖片和pdf互轉  將圖片轉為PDF: convert 圖片 PDF convert pic.jpg pic.pdf  將PDF轉為圖片: convert P

UTF-8編碼,二進位制漢字

<?php function StrToBin($str){ $arr = preg_split('/(?<!^)(?!$)/u', $str); foreach($arr as &$v){ $temp = unpa

駝峰命名法劃線風格的

下劃線轉駝峰比較簡單,直接根據下劃線打散成陣列,每個子項首字元轉大寫,再做字串拼接即可。 駝峰轉下劃線風格,稍微複雜一些。剛開始我沒有思路,後來想到,可以遍歷字串,遇到大寫字母將其轉換成小寫,並在

idea環境基於Gradle的Kotlin/Java的工程程式碼

建立工程目錄 java目錄程式碼示例 package net.println.ktdemo; import net.println.kedemo.User; public

wchar_t* char*

multi pan com nic return compose ide acp 轉化 //將單字節char*轉化為寬字節wchar_t* wchar_t* AnsiToUnicode(const char* szStr){ int nLen = MultiByte

utf8 unicode 編碼

true 編碼 turn cti ram brush amp switch bsp static function utf8_to_unicode($c) { switch(strlen($c)) { case 1:

Python list str

pytho str 輸出 互轉 div python post 字符串 pri 一、list轉字符串 命令:‘‘.join(list)其中,引號中是字符之間的分割符,如“,”,“;”,“\t”等等如:list = [1, 2, 3, 4, 5]‘‘.join(list)

DOM對象jQuery

scrip jquery 兩種 通過 需要 tel dom ron blog 一、jQuery對象轉成DOM對象: 兩種轉換方式將一個jQuery對象轉換成DOM對象:[index]和.get(index); (1)jQuery對象是一個數據對象,可以通過[index]的方

數組list

.cn ring 數組 code size length slist color pre 數組轉list 方法1: String[] stringArray = { "a", "b", "c", "d", "e" }; List<String> list =

數組List

arrays 集合public class TestArrayList { public static void main(String[] args) { List<String> list = new ArrayList<String>() ; list.add("AAA"

CentOSVFtpDTelnet服務的配置

centos vftpd telnet 在安裝好CentOS以後,需要設置Ftp和Telnet服務文件,才能啟動Ftp和Telnet服務,可以通過遠程控制進行開啟。開通FTP有gssftp和vsftpd二種,查了查,據說vsftpd更穩定和更安全。就用vsftpd吧。一、vsftpd的安裝1.1、

centosnetworkNetworkManager沖突的解決方法

network ;網卡; 重啟網卡出現報錯;查看錯誤日誌;可能是系統安裝了NetworkManager服務導致沖突了,停掉這個服務並設置服務不允許自啟動;之後再次修改配置文件後重啟網卡就不報錯了。centos下network和NetworkManager沖突的解決方法

CStringchar

erl HA str CP lpc In car har name CString轉char: CString m_Readcard; char ReaderName[22]; strcpy((char*)&ReaderName,(LPCTSTR)m_Readcar

C# 位元組陣列字串

本章講述:部分資料型別,格式轉換(十六進位制字串和位元組陣列 互轉    位元組陣列和字串 互轉)  public class HexConverter { #region 格式轉換 /// <summary> /// 轉換十六進位制