❶ c語言如何生成UTF-8編碼格式的文件
下面的Unix下函數可以會幫到你
getenv(取得環境變數內容)
相關函數 putenv,setenv,unsetenv
表頭文件 #include<stdlib.h>
定義函數 char * getenv(const char *name);
函數說明 getenv()用來取得參數name環境變數的內容。參數name為環境變數的名稱,如果該變數存在則會返回指向該內容的指針。環境變數的格式為name=value。
返回值 執行成功則返回指向該內容的指針,找不到符合的環境變數名稱則返回NULL。
範例 #include<stdlib.h>
mian()
{
char *p;
if((p = getenv(「USER」)))
printf(「USER=%s\n」,p);
}
執行 USER = root
putenv(改變或增加環境變數)
相關函數 getenv,setenv,unsetenv
表頭文件 #include4<stdlib.h>
定義函數 int putenv(const char * string);
函數說明 putenv()用來改變或增加環境變數的內容。參數string的格式為name=value,如果該環境變數原先存在,則變數內容會依參數string改變,否則此參數內容會成為新的環境變數。
返回值 執行成功則返回0,有錯誤發生則返回-1。
錯誤代碼 ENOMEM 內存不足,無法配置新的環境變數空間。
範例 #include<stdlib.h>
main()
{
char *p;
if((p = getenv(「USER」)))
printf(「USER =%s\n」,p);
putenv(「USER=test」);
printf(「USER+5s\n」,getenv(「USER」));
}
執行 USER=root
USER=root
setenv(改變或增加環境變數)
相關函數 getenv,putenv,unsetenv
表頭文件 #include<stdlib.h>
定義函數 int setenv(const char *name,const char * value,int overwrite);
函數說明 setenv()用來改變或增加環境變數的內容。參數name為環境變數名稱字元串。
參數 value則為變數內容,參數overwrite用來決定是否要改變已存在的環境變數。如果overwrite不為0,而該環境變數原已有內容,則原內容會被改為參數value所指的變數內容。如果overwrite為0,且該環境變數已有內容,則參數value會被忽略。
返回值 執行成功則返回0,有錯誤發生時返回-1。
錯誤代碼 ENOMEM 內存不足,無法配置新的環境變數空間
範例 #include<stdlib.h>
main()
{
char * p;
if((p=getenv(「USER」)))
printf(「USER =%s\n」,p);
setenv(「USER」,」test」,1);
printf(「USER=%s\n」,getenv(「USEr」));
unsetenv(「USER」);
printf(「USER=%s\n」,getenv(「USER」));
}
執行 USER = root
USER = test
USER = (null)
❷ C語言有專門把ASCII轉換成UTF的函數么
C語言里有十六位Unicode的直接數據定義。
比如char可以擴展成wschar
定義時
8位數據char a='n';
16位數據wschar a=L'n';
這樣的話,漢字也可以直接寫進去。何必一心求轉換。。。
❸ 如何在c語言中操作UTF-8字元
那你就去了解一下 UTF-8 的編碼規則啊,
簡單來說讀取某個位元組, 判斷它是多位元組的還是單位元組的,甚至是多位元組的非首位元組...
如果怕是一些標點符號,再把這些標點符號的判斷值加進去 。
❹ 如何將一個漢字用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的話是新的寫法。
你可以輸入一個日進去看看
❺ C語言UTF8要怎樣轉gb2312
一、這個轉換關鍵要有碼表,而不是什麼語言。UTF-8不一定總能轉換成GB2312、GBK、GB-18030等。GB2312實際上是UTF-8(Unicode的一種形式)的一個子集。
常用的基本方式有兩個類別:
1、iconv,這個是通用的,具體的看手冊
2、Windows的WideCharToMultiByte、MultiByteToWideChar。WideChar就是Unicode(UTF-16),UTF-8、GB2312等同屬於MultiByte,先要將UTF-8變成WideChar,然後將WideChar再變成GB2312。
二、如果只有一兩個文件,用記事本打開UTF8文件,然後保存,保存時點擊「保存選項」按鈕,選擇文件格式為ANSI,在中文Windows環境下,這個新文件就是GB2312格式的了。
❻ 求:C語言utf8轉utf16詳細源碼和教程
哈哈,選我吧!運氣不錯,不就前做過這個,不過是C++的稍微改了一下,給你看能不能用
請先閱讀一下給你的參考網址
http://blog.csdn.net/dengyunze/article/details/160958
-------------------------------------------------------------------------------------------
voidUtf162UTF8(constwchat_tszIn[],intnSourceLen,charszOut[])
{
unsignedcharfirstchar=0;//臨時變數存儲3位元組utf-8編碼的三個位元組中的一個
unsignedcharsecondchar=0;//同上
unsignedcharthirdchar=0;//同上
wchat_tvalue=0;
intindex=0;//將轉換過的字元存入szOut的索引
for(inti=0;i=0x0080&&(unsignedchar)szIn[i]>6)&0xef)|0xc0;
secondchar=(value&0x3f)|0x80;
szOut[index++]=firstchar;
szOut[index++]=secondchar;
}
//同兩位元組utf-8編碼這里進行的操作即為將後面的[1110xxxx10xxxxxx10xxxxxx]中的16位x分別取出來然後組成一個16位的數,既為utf-16編碼
elseif((unsignedchar)szIn[i]>=0x0800&&(unsignedchar)szIn[i]>12)|0xe0;
secondchar=((value>>6)&0x3f)|0x80;
thirdchar=(value&0x3f)|0x80;
szOut[index++]=firstchar;
szOut[index++]=secondchar;
szOut[index++]=thirdchar;
}
}
}
--------------------------------------------------------------------------------------------------
voidUTF82utf16(constchar*szIn,wchat_tszOut[])
{
wchar_tvalue=0;//
unsignedcharfirstchar=0;//臨時變數存儲3位元組utf-8編碼的三個位元組中的一個
unsignedcharsecondchar=0;//臨時變數存儲3位元組utf-8編碼的三個位元組中的一個
unsignedcharthirdchar=0;//臨時變數存儲3位元組utf-8編碼的三個位元組中的一個
intindex=0;
for(unsignedinti=0;i=127//若字元不是普通字元則對齊進行解碼,
&&(unsignedchar)szIn[i+1]>=127//判斷後面的2個字元是否也不是普通字元若都不是則為3位元組utf-8編碼
&&(unsignedchar)szIn[i+2]>=127)//此過程為上面編碼過程的逆過程
{
firstchar=szIn[i];
secondchar=szIn[i+1];
thirdchar=szIn[i+2];
value=(firstchar&0x1f)=127
&&(unsignedchar)szIn[i+1]>=127)
{
firstchar=szIn[i];
secondchar=szIn[i+1];
value=(firstchar&0x1f)<<6;<br>value|=(secondchar&0x3f)
szOut[index++]=value;
i+=2;
}
else
{
szOut[index++]=value;
++i;
}
}
}
代碼寫得不好,見諒
有問題Email:[email protected]
❼ 求助,C語言里如何把GBK碼轉換為UTF8
你是想要在linux下顯示漢字吧,輸入下面的指令就行了,記得改文件名啊,別無腦復制
iconv -f gbk -t utf8 shujujiegou.txt > shujujiegou.txt.utf8
❽ 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
❾ 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;
}
(9)c語言轉utf8函數擴展閱讀
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碼。