1. linux C用iconv編碼轉換問題 ,我現在需要將big5和utf8轉換為gbk。由於是截取url上的關鍵字
%A1%D7%AA
這類亂七八糟的編碼是rfc標准,iconv是不可能認識的,必須先將rfc編碼做個轉換。
如"%AA"這三個字元對應的實際字元是"0xaa",對應字元是一個,不要想成四個啦。
2. 請求在linux下C語言如何將漢字轉換成UTF
試試這個四個函數,C 裡面的,Linux 可用:
mbtowc
wctomb
mbstowcs
wcstombs
在 Linux 下試試看吧:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(void)
{
size_t cch;
char psz[1024];
wchar_t pwsz[] = { 0x52B3, 0x788C, 0x788C, 0 };
setlocale(LC_ALL, "");
cch = wcstombs(psz, pwsz, 1024);
if (cch != 0 && cch != -1) {
printf("%s", psz);
}
return 0;
}
zdl_361 說的 "utf8 勞碌碌" 不對,因為我也輸出 "勞碌碌",而我是用 Unicode 編碼的。在 Windows 上,char 是 ANSI,Unicode (wchar_t) 是 UTF-16;在 Linux 上,char 是 UTF-8,Unicode (wchar_t) 是 UTF-32。不過對於這個函數來說,在哪個平台上都不會因為字元編碼而影響使用。
3. 各位大俠: 在linux下如何用C實現漢字轉unicode碼。比如:「中國」轉成「5E5D 66EF」,在線等~~
/* Copyright (C) 2010 by Xingyou Chen <[email protected]>
*
* Test OS is Debian squeese AMD64 , source file stored in UTF-8
* If another encoding is used, this program may fail
*/
#include <stdio.h> /* printf() from here */
int main()
{
int i = 0; /* for loop */
char orig[6] = "中國"; /* demo text, Chinese char is 3 byte long */
unsigned short dest[2]; /* two 2-byte variable */
for(i = 0; i < 2; i++)
{ /* Don't understand? See UTF-8 and Unicode encoding */
dest[i] = (orig[3*i] & 0x1F) << 12;
dest[i] |= (orig[3*i + 1] & 0x3F) << 6;
dest[i] |= (orig[3*i + 2] & 0x3F);
printf("%x", dest[i]);
}
printf("\n");
return 0;
}
====================================================
「中國」: UTF-8 e4b8ad e59bbd Unicode 4e2d 56fd
你給出的那個編碼該是不正確的。這里只做了UTF-8到UCS-2的轉換,
中文編碼不少,沒功夫全寫出來(也寫不全),UTF-8是我平時用的。
在開源環境中,這個根本不是問題,可以參考zh-autoconvert的源代碼:
http://ftp.de.debian.org/debian/pool/main/z/zh-autoconvert/zh-autoconvert_0.3.16.orig.tar.gz
它提供了多種中文編碼間相互轉換的C語言代碼,找你需要的吧。
4. 在Linux如何讓更改文件的字元編碼
1.在Vim中直接進行轉換文件編碼,比如將一個文件轉換成utf-8格式
:set
fileencoding=utf-8
2.
enconv
轉換文件編碼,比如要將一個GBK編碼的文件轉換成UTF-8編碼,操作如下
enconv
-L
zh_CN
-x
UTF-8
filename
3.
iconv
轉換,iconv的命令格式如下:
iconv
-f
encoding
-t
encoding
inputfile
比如將一個UTF-8
編碼的文件轉換成GBK編碼
iconv
-f
GBK
-t
UTF-8
file1
-o
file2
查看文件編碼file命令
file
ip.txt
ip.txt:
UTF-8
Unicode
text,
with
escape
sequences
一、利用iconv命令進行編碼轉換文件內容編碼轉換
iconv命令用於轉換指定文件的編碼,默認輸出到標准輸出設備,亦可指定輸出文件。
用法:
iconv
[選項...]
[文件...]
有如下選項可用:
輸入/輸出格式規范:
-f,
--from-code=名稱
原始文本編碼
-t,
--to-code=名稱
輸出編碼
信息:
-l,
--list
列舉所有已知的字元集
輸出控制:
-c
從輸出中忽略無效的字元
-o,
--output=FILE
輸出文件
-s,
--silent
關閉警告
--verbose
列印進度信息
-?,
--help
給出該系統求助列表
--usage
給出簡要的用法信息
-V,
--version
列印程序版本號
例子:
iconv
-f
utf-8
-t
gb2312
aaa.txt
>bbb.txt
這個命令讀取aaa.txt文件,從utf-8編碼轉換為gb2312編碼,其輸出定向到bbb.txt文件。
5. 100財富給牛逼之人!就沒人知道在linux下用c語言如何將漢字的unicode編碼轉化為漢字嗎
除了iconv命令,我們在linux系統下的man page的第三節還可以看到一組iconv函數。它們分別是
iconv_t iconv_open(const char *tocode, const char *fromcode);
size_ticonv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
int iconv_close(iconv_t cd);
iconv_open函數用來打開一個編碼轉換的流,iconv函數的作用是實際進行轉換,iconv_close函數的作用就是關閉這個流。實際用法參見下面的例子,下面是一個將UTF-8碼轉換成GBK碼的例子,我們假設已經有了一個uft8編碼的輸入緩沖區inbuf以及這個緩沖區的長度inlen。
iconv_t cd = iconv_open( "GBK", "UTF-8");
char *outbuf = (char *)malloc(inlen * 4 );
bzero( outbuf, inlen * 4);
char *in = inbuf;
char *out = outbuf;
size_t outlen = inlen *4;
iconv(cd, &in, (size_t *)&inlen, &out,&outlen);
outlen = strlen(outbuf);
printf("%s\n",outbuf);
free(outbuf);
iconv_close(cd);
6. linux C語言:如何在ISO8859-1和GB2312字元編碼之間互相轉換
JAVA有一個public String(byte bytes[], Charset charset)函數可以用指定位元組數組和編碼來構造字元串。一個public byte[] getBytes(Charset charset)函數把字元串按指定編碼來得到位元組數組。可以用這兩個函數來實現編碼轉換。
下面是一個簡單的例子,注意一下例子中的文字本身的編碼,最好在自己的環境中用gb2312重新輸入,不然可能是亂碼。當然轉換後輸出肯定有一個是亂碼,也肯能都是亂碼。根據你的編輯器的編碼格式有關。public class EncodingTest
{
public static void main(String[] args)
{
try
{
String gb = new String("國標2312".getBytes(),"gb2312");
System.out.println(gb);
byte [] b = gb.getBytes("gb2312");
String ios = new String(b,"ISO-8859-1");
System.out.println(ios);
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
}
7. 100財富給牛逼之人就沒人知道在linux下用c語言如何將漢字的unicode編碼轉化為漢字
除了iconv敕令我們在linux體系下的man page的第三節還可以看到一組iconv函數。它們分別是 iconv_t iconv_open(const char *tocode, const char *fromcode); size_ticonv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); int iconv_close(iconv_t cd); iconv_open函數用來打開一個編碼轉換的流iconv函數的感化是實際進行轉換iconv_close函數的感化就是封閉這個流。實際用法拜見下面的例子下面是一個將UTF-8碼轉換成GBK碼的例子我們假設已經有了一個uft8編碼的輸入緩沖區inbuf以及這個緩沖區的長度inlen。 iconv_t cd = iconv_open( \"GBK\", \"UTF-8\"); char *outbuf = (char *)malloc(inlen * 4 ); bzero( outbuf, inlen * 4); char *in = inbuf; char *out = outbuf; size_t outlen = inlen *4; iconv[b]cd,
8. 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
9. linux下怎麼改變文件的編碼格式
1.在Vim中直接進行轉換文件編碼,比如將一個文件轉換成utf-8格式
:set fileencoding=utf-8
2. enconv 轉換文件編碼,比如要將一個GBK編碼的文件轉換成UTF-8編碼,操作如下
enconv -L zh_CN -x UTF-8 filename
3. iconv 轉換,iconv的命令格式如下:
iconv -f encoding -t encoding inputfile
比如將一個UTF-8 編碼的文件轉換成GBK編碼
iconv -f GBK -t UTF-8 file1 -o file2
查看文件編碼file命令
file ip.txt ip.txt: UTF-8 Unicode text, with escape sequences
一、利用iconv命令進行編碼轉換文件內容編碼轉換 iconv命令用於轉換指定文件的編碼,默認輸出到標准輸出設備,亦可指定輸出文件。 用法: iconv [選項...] [文件...] 有如下選項可用: 輸入/輸出格式規范: -f, --from-code=名稱 原始文本編碼 -t, --to-code=名稱 輸出編碼 信息: -l, --list 列舉所有已知的字元集 輸出控制: -c 從輸出中忽略無效的字元 -o, --output=FILE 輸出文件 -s, --silent 關閉警告 --verbose 列印進度信息 -?, --help 給出該系統求助列表 --usage 給出簡要的用法信息 -V, --version 列印程序版本號 例子: iconv -f utf-8 -t gb2312 aaa.txt >bbb.txt 這個命令讀取aaa.txt文件,從utf-8編碼轉換為gb2312編碼,其輸出定向到bbb.txt文件。
10. 如何在Linux系統實現字元編碼轉換
Linux 下查看文件字元編碼和轉換編碼 如果你需要在 Linux 中操作 windows 下的文件,那麼你可能會經常遇 到 文 件 編 碼 轉 換 的 問 題 。 Windows 中 默 認 的 文 件 格 式 是 GBK(gb2312),而 Linux 一般都是 UTF-8。下面介紹一下,在 Linux 中如何查看文件的編碼及如何進行對文件進行編碼轉換。 一,查看文件編碼: 在 Linux 中查看文件編碼可以通過以下幾種方式: 1.在 Vim 中可以直接查看文件編碼 :set fileencoding 即可顯示文件編碼格式。 如果你只是想查看其它編碼格式的文件或者想解決用 Vim 查看文件亂 碼的問題,那麼你可以在 ~/.vimrc 文件中添加以下內容: set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936 這樣, 就可以讓 vim 自動識別文件編碼 (可以自動識別 UTF-8或者 GBK 編碼的文件) ,其實就是依照 fileencodings 提供的編碼列表嘗試,如 果沒有找到合適的編碼,就用 latin-1(ASCII)編碼打開。 2. enca (如果你的系統中沒有安裝這個命令,可以用 sudo yum install -y enca 安裝 )查看文件編碼 $ enca filename filename: Universal transformation format 8 bits; UTF-8 CRLF line terminators 需要說明一點的是,enca 對某些 GBK 編碼的文件識別的不是很好,識 別時會出現: Unrecognized encoding 二,文件編碼轉換 1.在 Vim 中直接進行轉換文件編碼,比如將一個文件轉換成 utf-8格式 :set fileencoding=utf-8 2. iconv 轉換,iconv 的命令格式如下:輸入/輸出格式規范: -f, --from-code=名稱 原始文本編碼 -t, --to-code=名稱 輸出編碼 信息: www.Svn8.Com -l, --list 列舉所有已知的字元集 輸出控制: -c 從輸出中忽略無效的字元 -o, --output=FILE 輸出文件 Svn8.Com -s, --s ilent 關閉警告 --verbose 列印進度信息 -?, --help 給出該系統求助列表 --usage 給出簡要的用法信息 -V, --version 列印程序版本號 例子: iconv -f utf-8 -t gb2312 aaa.txt >bbb.txt 這個命令讀取 aaa.txt 文件,從 utf-8編碼轉換為 gb2312編碼,其輸出定向到 bbb.txt文件。 iconv -f encoding -t encoding inputfile 比如將一個 UTF-8 編碼的文件轉換成 GBK 編碼 iconv -f GBK -t UTF-8 file1 -o file2 3. enconv 轉換文件編碼 比如要將一個 GBK 編碼的文件轉換成 UTF-8編碼,操作如下 enconv -L zh_CN -x UTF-8 filename