久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

linux socket亂碼如何解決

共計(jì) 3096 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。

這篇文章主要講解了“l(fā)inux socket 亂碼如何解決”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學(xué)習(xí)“l(fā)inux socket 亂碼如何解決”吧!

linux socket 亂碼的解決辦法:1、打開終端命令窗口;2、利用 iconv 命令實(shí)現(xiàn) linux 文件字符集轉(zhuǎn)換,轉(zhuǎn)換命令如“iconv -f utf-8 -t gb2312 /server_test/reports/software_.txt /server_test/reports/software_asserts.txt”。

問題描述:

linux 中有一個(gè)自己寫的 ftp 客戶端,windows 上有一個(gè)用 windows 自帶軟件搭的 ftp 服務(wù)端,當(dāng)我通過程序在服務(wù)端上創(chuàng)建含有中文的目錄或者含有中文的文件名時(shí),中文名亂碼

問題分析:

這毫無疑問是由于編碼問題導(dǎo)致的,那么如何確認(rèn)應(yīng)該是哪種編碼呢?百度之后發(fā)現(xiàn),ubuntu 下默認(rèn)采用 utf-8,而 windows 默認(rèn)采用 gbk,所以保證含有中文路徑的內(nèi)容發(fā)出來的時(shí)候 轉(zhuǎn)成 gbk 就可以了

解決方案:

utf8 和 gbk 互轉(zhuǎn):

linux 文件字符集轉(zhuǎn)換 (utf8-gb2312)

一,命令行

在 LINUX 上進(jìn)行編碼轉(zhuǎn)換時(shí), 可以利用 iconv 命令實(shí)現(xiàn), 這是針對(duì)文件的, 即將指定文件從一種編碼轉(zhuǎn)換為另一種編碼。

iconv 命令用法如下:

iconv [選項(xiàng)...] [文件...]

輸入 / 輸出格式規(guī)范:

-f, --from-code= 名稱   原始文本編碼
 -t, --to-code= 名稱   輸出編碼 

列舉所有已知的字符集 -l, –list

輸出控制:

-c  從輸出中忽略無效的字符
 -o, --output=FILE   輸出文件
 -s, --silent   關(guān)閉警告
 --verbose   打印進(jìn)度信息 

例子:

iconv -f utf-8 -t gb2312 /server_test/reports/software_.txt   /server_test/reports/software_asserts.txt

下面需求庫(kù)文件請(qǐng)?jiān)谇度胧桨遄由厦嫦螺d libiconv 庫(kù)

二,函數(shù)運(yùn)用

1. 頭文件

#include  iconv.h

2. 函數(shù)

(1) iconv_t iconv_open(const char *tocode, const char *fromcode);

此函數(shù)說明將要進(jìn)行哪兩種編碼的轉(zhuǎn)換,tocode 是目標(biāo)編碼,fromcode 是原編碼, 該函數(shù)返回一個(gè)轉(zhuǎn)換句柄, 供以下兩個(gè)函數(shù)使用。

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

此函數(shù)從 inbuf 中讀取字符, 轉(zhuǎn)換后輸出到 outbuf 中,inbytesleft 用以記錄還未轉(zhuǎn)換的字符數(shù),outbytesleft 用以記錄輸出緩沖的剩余空間。

(3) int iconv_close(iconv_t cd);

此函數(shù)用于關(guān)閉轉(zhuǎn)換句柄, 釋放資源。

3. 例子: 用 C 語(yǔ)言實(shí)現(xiàn)的轉(zhuǎn)換示例程序

#include  stdio.h 
#include  string.h 
#include  iconv.h
#include  stdlib.h 
 
static int charset_convert( const char *from_charset, const char *to_charset,
 char *in_buf, size_t in_left, char *out_buf, size_t out_left)
 iconv_t icd = (iconv_t)-1;
 size_t sRet = -1;
 char *pIn = in_buf;
 char *pOut = out_buf;
 size_t outLen = out_left;
 
 if (NULL == from_charset || NULL == to_charset || NULL == in_buf || 0  = in_left || NULL == out_buf || 0  = out_left)
 {
 return -1;
 }
 
 icd = iconv_open(to_charset, from_charset);
 if ((iconv_t)-1 == icd)
 {
 return -1;
 }
 
 sRet = iconv(icd,  pIn,  in_left,  pOut,  out_left);
 if (( size_t )-1 == sRet)
 { iconv_close(icd);
 return -1;
 }
 
 out_buf[outLen - out_left] = 0;
 iconv_close(icd);
 return ( int )(outLen - out_left);
 
static int charset_convert_UTF8_TO_GB2312( char *in_buf, size_t in_left, char *out_buf, size_t out_left)
 return charset_convert(  UTF-8  ,  GB2312  , in_buf, in_left, out_buf, out_left);
 
static int charset_convert_GB2312_TO_UTF8( char *in_buf, size_t in_left, char *out_buf, size_t out_left)
 return charset_convert(  GB2312-8  ,  UTF-8  , in_buf, in_left, out_buf, out_left);
 
int main()
 char *pIn =  hello  中國(guó)人  ;
 char *pOut = NULL;
 size_t outLen = 0;
 size_t inLen = 0;
 int iRet = -1;
 
 inLen = strlen (pIn);
 outLen = inLen * 3;
 pOut = ( char *) malloc ( sizeof ( char ) * outLen);
 if (NULL == pOut)
 {
 return -1;
 }
 memset (pOut, 0, sizeof ( char ) * outLen);
 
 iRet = charset_convert_UTF8_TO_GB2312(pIn, ( size_t )inLen, pOut, ( size_t )inLen);
 if (-1 == iRet)
 {
 return -1;
 }
 
 printf (  out = %s;\touLen = %d\n  , pOut, iRet);
 free (pOut);
 pOut = NULL;
 return 0;
}

這個(gè)實(shí)現(xiàn)可以跨平臺(tái),個(gè)人覺得比較好~

ps:之前做的 ftp client 是在 windows 上的,由于甲方說要移植過去,就換到了 windows 上,然后就出現(xiàn)了上面的問題,雖然對(duì)項(xiàng)目中出現(xiàn)的中文比較方案,但好歹是積累了解決問題的經(jīng)驗(yàn)(不用中文,用拼音都行啊)

感謝各位的閱讀,以上就是“l(fā)inux socket 亂碼如何解決”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì) linux socket 亂碼如何解決這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-12發(fā)表,共計(jì)3096字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 清流县| 永兴县| 正阳县| 岳阳市| 邢台县| 辽阳县| 平顶山市| 龙泉市| 巴青县| 天台县| 盘锦市| 赤水市| 濉溪县| 克山县| 江西省| 喀喇沁旗| 青海省| 锦屏县| 开化县| 镇宁| 南召县| 汽车| 常德市| 岳池县| 苗栗市| 龙游县| 云梦县| 普兰县| 顺义区| 崇义县| 禹城市| 甘洛县| 墨江| 汽车| 和田市| 鄂托克旗| 齐齐哈尔市| 高青县| 建阳市| 阿拉善盟| 镇雄县|