//先转码,然后写文件就行了 C/C++代码
//先读取Unicode文件然后再转成Ansi数据流供程序处理(不转换则将中间转换的处理//删除
直接返回pwbBuffer数据)
bool GetFileData(const char* filePath,PBYTE& sourValue)
{
char
isUnicode[2];//专用于判断是否unicode文件
DWORD
fileLen; //文件长度
DWORD
dwCount; //实际读取出的数据量
FILE
*hSource; //文件
if
(!(hSource=fopen(filePath,_T("rb"))))
{
return false;
}
fseek(hSource,0,SEEK_END);
fileLen=ftell(hSource);
fseek(hSource,0,SEEK_SET);
//判断文件类型(ANSI或UNICODE)
fread(isUnicode, 1, 2, hSource);
fseek(hSource,0,SEEK_SET);
//UNICODE格式
if(
isUnicode[0] == '\xff' && isUnicode[1] == '\xfe')
{
fseek(hSource,2,SEEK_SET);//跳过两个字节Unicode标识再处理
LPWSTR pwbBuffer=new WCHAR[fileLen];
dwCount = fread(pwbBuffer, 1, fileLen, hSource);
if(ferror(hSource))
{
return false;
}
//Unicode转换Ansi处理(适用于一般性文本)
//----------------
DWORD dwNum =
WideCharToMultiByte(CP_OEMCP,NULL,pwbBuffer,-1,NULL,0,NULL,FALSE);//计算要使用空间
dwCount=dwNum;//unicode返回的值要是转换后的大小
if(!(sourValue = (BYTE *)malloc(dwNum)))
{
return false;
}
WideCharToMultiByte
(CP_OEMCP,NULL,pwbBuffer,-1,(PCHAR)sourValue,dwNum,NULL,FALSE);
//---------------
delete[] pwbBuffer;
}
else
{
//...........Ansi处理
}
fclose(hSource);
return
true;
}
//C语言把汉子转成Unicode格式 调用了WindowsAPI WideCharToMultibyte
MultiByteToWideChar
//光是unicode就有好几个标准:utf8、utf16le、utf16be、utf32等等。你要一一实现的话,不知道几年能做完。而且//更重要的是,这个别人早都做好了,为什么还要重复呢。
//第2种方法,可以将汉字写入文本文件中,保存为unicode,以二进进方式读,取值
#include
#include
#include
int main(int argc, char *argv[])
{
char *testStr = "中";
unsigned short outputStr[20] = {0};
int unicodeLen = 0;
int i = 0;
unicodeLen = MultiByteToWideChar( CP_ACP,
0,
testStr,
-1,
NULL,
0 ); MultiByteToWideChar( CP_ACP,
0,
testStr,
-1,
(LPWSTR)outputStr,
unicodeLen );
for
(i=0;i
{
printf("[%d]%x\r\n",i,outputStr[i]);
}
return 0;
}
//java 字符串 UTF-8转成 ANSI编码
new String(str.getBytes("UTF-8"), "GB2312");
//http://bbs.csdn.net/topics/390887199
//ANSI 编码相当于没有编码,操作系统是 GB2312 的话,就是上面这例子,准确地说是读取 JVM
//从操作系统中读取的默认编码。这样的话,就能在这台机器上正常显示出来,当然把这个字符保存在文件里面跑到另 //一个
Big5上依然无法显示出来。System.getProperty("file.encoding");
//System.getProperty("sun.jnu.encoding");
//Javascript
//UTF8编码调用encodeURIComponent就行
alert(encodeURIComponent('中国'))
//gb2312编码
//C#
//http://bbs.csdn.net/topics/30367307
//streamWriter 写入文本文件 编码为UTF-8 怎么让它以ANSI格式保存
Dim objwriter As New StreamWriter(filename, False)
Dim objwriter As New StreamWriter(filename,
False,System.Text.ASCIIEncoding)