『壹』 100財富給牛逼之人!就沒人知道在linux下用c語言如何將漢字的unicode編碼轉化為漢字嗎
試試這個四個函數,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。不過對於這個函數來說,在哪個平台上都不會因為字元編碼而影響使用。
『貳』 如何將一個漢字用C語言將其轉換成Unicode編碼最好直接編成UTF-8,是不是vc裡面有函數可以直接編求程序
對,有。
#define_CONVERSION_USES_THREAD_LOCALE
#include<atlbase.h>
#include<atlconv.h>
#include<stdio.h>
#include<string.h>
intmain()
{
USES_CONVERSION;
_acp=CP_ACP;
charbuf[3]={0};
buf[0]=getchar();
buf[1]=getchar();
wchar_ttmpbuf[2]={0};
tmpbuf[0]=A2W(buf)[0];
_acp=CP_UTF8;
charutf8buf[4];
strcpy(utf8buf,W2A(tmpbuf));
inti=0;
while(utf8buf[i]!=0)
{
printf("%02x",(unsignedchar)utf8buf[i]);
++i;
}
return0;
}
如果不是VC6.0而是新的VC的話是新的寫法。
你可以輸入一個日進去看看
『叄』 各位大俠: 在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語言代碼,找你需要的吧。
『肆』 怎樣用C語言實現漢字和ASCII碼到UNICODE碼的轉換
用MultiByteToWideChar和WideCharToMultiByte可以做到編碼的轉換。
MultiByteToWideChar是一個windows API 函數,該函數映射一個字元串到一個寬字元(unicode)的字元串。
函數原型:
int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cchMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);參數:
CodePage:指定執行轉換的字元集,這個參數可以為系統已安裝或有效的任何字元集所給定的值。你也可以指定其為下面的任意一值:
CP_ACP:ANSI字元集;CP_MACCP:Macintosh代碼頁;CP_OEMCP:OEM代碼頁;
CP_SYMBOL:符號字元集(42);CP_THREAD_ACP:當前線程ANSI代碼頁;
CP_UTF7:使用UTF-7轉換;CP_UTF8:使用UTF-8轉換。
dwFlags:一組位標記用以指出是否未轉換成預作或寬字元(若組合形式存在),是否使用象形文字替代控制字元,以及如何處理無效字元。你可以指定下面是標記常量的組合,含義如下:
MB_PRECOMPOSED:通常使用預作字元——就是說,由一個基本字元和一個非空字元組成的字元只有一個單一的字元值。這是預設的轉換選擇。不能與
MB_COMPOSITE值一起使用。
MB_COMPOSITE:通常使用組合字元——就是說,由一個基本字元和一個非空字元組成的字元分別有不同的字元值。不能與MB_PRECOMPOSED值一起使用。
MB_ERR_INVALID_CHARS:如果函數遇到無效的輸入字元,它將運行失敗,且GetLastErro返回ERROR_NO_UNICODE_TRANSLATION值。
MB_USEGLYPHCHARS:使用象形文字替代控制字元。
組合字元由一個基礎字元和一個非空字元構成,每一個都有不同的字元值。每個預作字元都有單一的字元值給基礎/非空字元的組成。在字元è中,e就是基礎字元,而重音符標記就是非空字元。
函數的預設動作是轉換成預作的形式。如果預作的形式不存在,函數將嘗試轉換成組合形式。
標記MB_PRECOMPOSED和MB_COMPOSITE是互斥的,而標記MB_USEGLYPHCHARS和MB_ERR_INVALID_CHARS則不管其它標記如何都可以設置。
lpMultiByteStr:指向將被轉換字元串的字元。
cchMultiByte:指定由參數lpMultiByteStr指向的字元串中位元組的個數。如果lpMultiByteStr指定的字元串以空字元終止,可以設置為-1(如果字元串不是以空字元中止,設置為-1可能失敗,可能成功),此參數設置為0函數將失敗。
lpWideCharStr:指向接收被轉換字元串的緩沖區。
cchWideChar:指定由參數lpWideCharStr指向的緩沖區的寬字元個數。若此值為零,函數返回緩沖區所必需的寬字元數,在這種情況下,lpWideCharStr中的緩沖區不被使用。返回值:
如果函數運行成功,並且cchWideChar不為零,返回值是由lpWideCharStr指向的緩沖區中寫入的寬字元數;如果函數運行成功,並且cchWideChar為零,返回值是接收到待轉換字元串的緩沖區所需求的寬字元數大小。如果函數運行失敗,返回值為零。若想獲得更多錯誤信息,請調用GetLastError函數。它可以返回下面所列錯誤代碼:
ERROR_INSUFFICIENT_BUFFER;ERROR_INVALID_FLAGS;
ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。WideCharToMultiByte,該函數映射一個unicode字元串到一個多位元組字元串。
函數原型:
int WideCharToMultiByte(
UINT CodePage, //指定執行轉換的代碼頁
DWORD dwFlags, //允許你進行額外的控制,它會影響使用了讀音符號(比如重音)的字元
LPCWSTR lpWideCharStr, //指定要轉換為寬位元組字元串的緩沖區
int cchWideChar, //指定由參數lpWideCharStr指向的緩沖區的字元個數
LPSTR lpMultiByteStr, //指向接收被轉換字元串的緩沖區
int cchMultiByte, //指定由參數lpMultiByteStr指向的緩沖區最大值
LPCSTR lpDefaultChar, //遇到一個不能轉換的寬字元,函數便會使用pDefaultChar參數指向的字元
LPBOOL pfUsedDefaultChar //至少有一個字元不能轉換為其多位元組形式,函數就會把這個變數設為TRUE
);
參數:
CodePage:指定執行轉換的代碼頁,這個參數可以為系統已安裝或有效的任何代碼頁所給定的值。你也可以指定其為下面的任意一值:
CP_ACP:ANSI代碼頁;CP_MACCP:Macintosh代碼頁;CP_OEMCP:OEM代碼頁;
CP_SYMBOL:符號代碼頁(42);CP_THREAD_ACP:當前線程ANSI代碼頁;
CP_UTF7:使用UTF-7轉換;CP_UTF8:使用UTF-8轉換
返回值:
如果函數運行成功,並且cchMultiByte不為零,返回值是由 lpMultiByteStr指向的緩沖區中寫入的位元組數;如果函數運行成功,並且cchMultiByte為零,返回值是接收到待轉換字元串的緩沖區所必需的位元組數。如果函數運行失敗,返回值為零。若想獲得更多錯誤信息,請調用GetLastError函數。它可以返回下面所列錯誤代碼:
ERROR_INSUFFICIENT_BJFFER;ERROR_INVALID_FLAGS;
ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。
注意:指針lpMultiByteStr和lpWideCharStr必須不一樣。如果一樣,函數將失敗,GetLastError將返回ERROR_INVALID_PARAMETER的值。
Windows CE:不支持參數CodePage中的CP_UTF7和CP_UTF8的值,以及參數dwFlags中的WC_NO_BEST_FIT_CHARS值。
『伍』 C語言怎麼把漢字轉換為對應的unicode碼...
網上有漢字內碼表的,你可以去看一下,
『陸』 c語言怎麼把UTF-8轉換成Unicode
下面程序給出的是UTF-8轉成Unicode(UCS-2)的函數:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
int utf8_to_unicode(char* pInput, char** ppOutput)
{
int outputSize = 0; //記錄轉換後的Unicode字元串的位元組數
*ppOutput = (char *)malloc(strlen(pInput) * 2); //為輸出字元串分配足夠大的內存空
memset(*ppOutput, 0, strlen(pInput) * 2);
char *tmp = *ppOutput; //臨時變數,用於遍歷輸出字元串
while (*pInput)
{
if (*pInput > 0x00 && *pInput <= 0x7F) //處理單位元組UTF8字元(英文字母、數字)
{
*tmp = *pInput;
tmp++;
*tmp = 0; //小端法表示,在高地址填補0
}
else if (((*pInput) & 0xE0) == 0xC0) //處理雙位元組UTF8字元
{
char high = *pInput;
pInput++;
char low = *pInput;
if ((low & 0xC0) != 0x80) //檢查是否為合法的UTF8字元表示
{
return -1; //如果不是則報錯
}
*tmp = (high << 6) + (low & 0x3F);
tmp++;
*tmp = (high >> 2) & 0x07;
}
else if (((*pInput) & 0xF0) == 0xE0)//處理三位元組UTF8字元
{
char high = *pInput;
pInput++;
char middle = *pInput;
pInput++;
char low = *pInput;
if (((middle & 0xC0) != 0x80) || ((low & 0xC0) != 0x80))
{
return -1;
}
*tmp = (middle << 6) + (low & 0x7F);
tmp++;
*tmp = (high << 4) + ((middle >> 2) & 0x0F);
}
else //對於其他位元組數的UTF8字元不進行處理
{
return -1;
}
pInput ++;
tmp ++;
outputSize += 2;
}
*tmp = 0;
tmp++;
*tmp = 0;
return outputSize;
}
(6)漢字轉unicodec語言擴展閱讀
UTF-8:互聯網的普及, 強烈要求出現一種統一的編碼方式。 UTF-8就是在互聯網上使用最廣的一種unicode的實現方式。其他實現方式還包括UTF-16和UTF-32,不過在互聯網上基本不用。重復一遍,這里的關系是,UTF-8是Unicode的實現方式之一。
UTF-8最大的一個特點,就是它是一種變長的編碼方式。它可以使用1~6個位元組表示一個符號,根據不同的符號而變化位元組長度。
UTF-8的編碼規則:
UTF-8的編碼規則很簡單,只有兩條:
1、對於單位元組的符號,位元組的第一位設為0,後面7位為這個符號的unicode碼。因此對於英語字母,UTF-8編碼和ASCII碼是相同的。
2、對於n位元組的符號(n>1),第一個位元組的前n位都設為1,第n+1位設為0,後面位元組的前兩位一律設為10。剩下的沒有提及的二進制位,全部為這個符號的unicode碼。
『柒』 請問如何用C語言實現漢字,和Unicode編碼的轉換
字轉換:wctomb、mbtowc,wc 指 Wide charactor,mb 指 Multi-byte。
字元串轉換:wcstombs、mbstowcs,wcs 和 mbs 的 s 指 string。
這 4 個函數是 C 標准函數庫函數中的。如果只是在 Windows 平台下編程,可直接調用 Windows API 函數 WideCharToMultiByte 和 MultiByteToWideChar 實現。但是如果調用標准庫函數的話,在 Linux 下也是有效的。調用標准庫函數,首先必須包含 locale.h 並調用 setlocale(LC_ALL, "") 後才能正確轉換。Windows 下的 Multi-byte 是 ANSI 編碼的,Wide charactor 是 Unicode (UTF-16) 編碼,而 Linux 下的 Multi-byte 是 UTF-8 編碼的,Wide charactor 是 Unicode (UTF-32) 編碼。
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(void)
{
char str[12];
wchar_t wstr[] = { 0x52B3, 0x788C, 0 };
setlocale(LC_ALL, "");
wcstombs(str, wstr, sizeof(str)/sizeof(char));
printf("%s", str);
return 0;
}
『捌』 C語言中如何輸出unicode編碼
Unicode編碼
在計算機科學領域中,Unicode(統一碼、萬國碼、單一碼、標准萬國碼)是業界的一種標准,它可以使電腦得以呈現世界上數十種文字的系統。Unicode是基於通用字元集(Universal Character Set)的標准來發展,並且同時也以書本的形式(The Unicode Standard,目前第五版由Addison-Wesley Professional出版,ISBN-10: 0321480910)對外發表。Unicode包含了超過十萬個字元(在2005年,Unicode的第十萬個字元被採納且認可成為標准之一)、一組可用以作為視覺參考的代碼圖表、一套編碼方法與一組標准字元編碼、一套包含了上標字、下標字等字元特性的列舉等。
Unicode的編碼方式與ISO 10646的通用字元集(Universal Character Set,UCS)概念相對應,目前實際應用的Unicode版本對應於UCS-2,使用16位的編碼空間。也就是每個字元佔用2個位元組。這樣理論上一共最多可以表示216即65536個字元。基本滿足各種語言的使用。實際上目前版本的Unicode尚未填充滿這16位編碼,保留了大量空間作為特殊使用或將來擴展。C++處理Unicode編碼
為了處理Unicode編碼C++為每個字元處理函數提供了寬字元(wchar_t)處理函數。在ANSI/ISO 9899--1990也就是美國國家為程序設計語言C指定的標准(也稱為ANSI C)中是這樣定義的:用多個位元組來代表的字元稱之為寬字元,而Unicode只是寬字元編碼的一種實現,寬字元並不一定是Unicode。
C語言中輸出unicode編碼可以是用寬字元輸出函數。
下面是寬字元常用的輸入輸出函數表:
列印和掃描字元串:
寬字元函數 描述
fprintf()/fwprintf() 使用vararg參量的格式化輸出
fscanf()/fwscanf() 格式化讀入
printf() 使用vararg參量的格式化輸出到標准輸出
scanf() 從標准輸入的格式化讀入
sprintf()/swprintf() 根據vararg參量表格式化成字元串
sscanf() 以字元串作格式化讀入
vfprintf()/vfwprintf() 使用stdarg參量表格式化輸出到文件
vprintf() 使用stdarg參量表格式化輸出到標准輸出
vsprintf()/vswprintf() 格式化stdarg參量表並寫到字元串
輸入和輸出:
寬字元函數 普通C函數 描述
fgetwc() fgetc() 從流中讀入一個字元並轉換為寬字元
fgetws() fgets() 從流中讀入一個字元串並轉換為寬字元串
fputwc() fputc() 把寬字元轉換為多位元組字元並且輸出到標准輸出
fputws() fputs() 把寬字元串轉換為多位元組字元並且輸出到標准輸出串
getwc() getc() 從標准輸入中讀取字元, 並且轉換為寬字元
getwchar() getchar() 從標准輸入中讀取字元, 並且轉換為寬字元
None gets() 使用fgetws()
putwc() putc() 把寬字元轉換成多位元組字元並且寫到標准輸出
putwchar() putchar() 把寬字元轉換成多位元組字元並且寫到標准輸出
None puts() 使用fputws()
ungetwc() ungetc() 把一個寬字元放回到輸入流中
『玖』 用C語言怎麼樣把Unicode編碼轉換成(漢字)assic碼
c里沒有。找os的。windows 有相應的API。
WideCharToMultiByte和MultiByteToWideChar吧,大概是這兩個。具體怎麼用到網上搜吧。