當前位置:首頁 » 編程語言 » c語言iconv

c語言iconv

發布時間: 2022-09-23 22:02:46

『壹』 用C語言批量更改文件名

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <iconv.h>
#include <errno.h>
/*int to_iconv(char *in,size_t in_bytes,char *out,size_t out_bytes,
const char *from,const char *to)*/
int to_iconv(char *in,char *out,size_t out_bytes,const char *from,const char *to)
{
iconv_t cd;
size_t in_bytes=strlen(in);
//size_t out_bytes;
if((cd=iconv_open(to,from)) == (iconv_t)-1)
{
perror("iconv_open");
return -1;
}
if(iconv(cd,&in,&in_bytes,&out,&out_bytes) == -1)
{
perror("iconv");
return -1;
}
iconv_close(cd);
return 0;
}
void read_and_iconv(char *path,const char *from,const char *to)
{
DIR *dirp;
struct dirent *dir;
struct stat buf;
char temp[512]; //用於保存轉換後的文件名稱
if((dirp=opendir(path)) == NULL) //讀取文件夾
{
perror("opendir");
return;
}
chdir(path); //進入到該文件夾內部
while(dir=readdir(dirp)) //讀取該文件夾下所有文件
{
if((strcmp(dir->d_name,".") == 0) || (strcmp(dir->d_name,"..") == 0))
//過濾掉.以及..文件夾,不然會死循環的
continue;
bzero(temp,sizeof(temp));
to_iconv(dir->d_name,temp,sizeof(temp),from,to); //進行編碼轉換
rename(dir->d_name,temp); //進行重命名
printf("rename %s to %s\n",dir->d_name,temp);
stat(temp,&buf);
if(S_ISDIR(buf.st_mode)) //判斷當前讀取的文件是否為文件夾
{
read_and_iconv(temp,from,to); //如果是則遞歸處理
chdir(".."); //處理完成後一定要記得返回上一層目錄哦,不然其它文件就無法處理了
}
}
closedir(dirp);
}
int main(int argc,char **argv)
{
read_and_iconv(argv[1],argv[2],argv[3]);
/*第一個參數是要轉換的文件夾所在的文件夾名稱
*第二個參數是文件名稱所使用的編碼(這里為GBK)
*第三個參數是要轉換成何種編碼(這里為UTF-8)
*/
return 0;
}

『貳』 這個怎麼用C語言編出來啊

有一個工具叫iconv,可以用來轉換文字編碼,可以用C語言調用dll。
梨花體就是斷句,首先用C語言進行句子結構分析,分出主謂賓定狀補,然後拆分。

『叄』 C語言下實現對字元串進行utf-8格式的轉換

標准庫里沒有。但搜了一下網上應該找到不少,比如這個:

std::stringiso_8859_1_to_utf8(std::string&str)
{
stringstrOut;
for(std::string::iteratorit=str.begin();it!=str.end();++it)
{
uint8_tch=*it;
if(ch<0x80){
strOut.push_back(ch);
}
else{
strOut.push_back(0xc0|ch>>6);
strOut.push_back(0x80|(ch&0x3f));
}
}
returnstrOut;
}

http://stackoverflow.com/questions/4059775/convert-iso-8859-1-strings-to-utf-8-in-c-c

『肆』 linux下編碼轉換問題,C語言實現,使用iconv函數族

1、iconv的含義是將一個抽象的符號的編碼進行轉換。
但是如果一個符號比如「個」,可能在BIG5的編碼中不存在(繁體字中不同)
GBK包含的是簡體字,BIG5包含的是繁體字,Unicode包含全部,
所以
GBK->Unicode,Big5-Unicode (總是OK)
Unicode->GBK (當裡面僅包含英文及簡體時OK)
Unicode->BIG5 (當裡面僅包含英文及繁體時OK)
GBK->Big5 (基本上不行,除非某些字沒有特別的簡體字)
GBK->Big5是漢字的簡繁轉換,不是編碼轉換,簡體字轉繁體字還有一個問題,一個簡體字可能是對應多個繁體字,這種很難轉換正確。繁體字轉換成簡體字相對難度低。

2、#include <iconv.h>
size_t iconv(iconv_t cd,
char **inbuf, size_t *inbytesleft,
char **outbuf, size_t *outbytesleft);
函數原型, outbuf是一個 char **類型
在函數手冊中:
The iconv() function converts one multibyte character at a time, and for each character conversion it increments *inbuf and decrements
*inbytesleft by the number of converted input bytes, it increments *outbuf and decrements *outbytesleft by the number of converted
output bytes

『伍』 如何使用C語言將漢字轉換成UTF8編碼,如將「你好」轉成:%E4%BD%A0%E5%A5%

你說的好像是不對。這是把ascii馬用16進製表示。並不是utf8,我不知道你要干什麼,不過我猜你做的是web應用,需要把特殊字元轉化成%16進制格式,如果你的系統真是utf8的話,我想你應該這么做
用iconv_open和iconv,先把字元串變成utf-8。然後在把這個串中的每個位元組都變成16進制加%的格式。
如果你只是需要16進制轉換,那就簡單了。把沒有字元的ascii拿出來,sprintf(%02x)成16進制,在合起來就成。

『陸』 linux下C語言iconv字元轉換問題

#include <iconv.h>

size_t iconv(iconv_t cd,
char **inbuf, size_t *inbytesleft,
char **outbuf, size_t *outbytesleft);

你看函數原型, outbuf是一個 char **類型
在函數手冊中:
The iconv() function converts one multibyte character at a time, and for each character conversion it increments *inbuf and decrements
*inbytesleft by the number of converted input bytes, it increments *outbuf and decrements *outbytesleft by the number of converted
output bytes

也就是說,當你執行過iconv以後,*outbuf所指向的內存空間位置已經被改掉了, 所以你任何時候去讀*outbuf, 都是讀不到任何iconv後的數據的(都在*outbuf這個指針前面放著呢)。

所以你應該 預先備份outbuf的數據,
比如 char k[1000]; char *outb = k; 執行完iconv(t,&inb,&inl,&outb,&outl)以後,你去讀k數組就可以了。

熱點內容
python安裝後怎麼打開 發布:2025-01-10 11:08:35 瀏覽:870
phpjava架構 發布:2025-01-10 10:56:06 瀏覽:382
python二維排序 發布:2025-01-10 10:56:00 瀏覽:607
南水北調怎麼配置 發布:2025-01-10 10:55:27 瀏覽:121
廣數980系統參數密碼是多少 發布:2025-01-10 10:55:25 瀏覽:577
androidhtml字體 發布:2025-01-10 10:55:01 瀏覽:787
資料庫連接工廠模式 發布:2025-01-10 10:51:00 瀏覽:487
mac文件夾路徑設置 發布:2025-01-10 10:48:12 瀏覽:803
shell腳本自動密碼 發布:2025-01-10 10:46:29 瀏覽:766
安卓手機怎麼切兩個屏 發布:2025-01-10 10:33:51 瀏覽:684