高手救命:如何生成UTF-8文件,其中文件内容(中文等)也是UTF-8编码的 --索要向相关代码

koko1998 2004-09-24 11:36:29
如题:
通过文件党首标志 EF BB BF可以生成UTF-8文件
可是如何将现有的Unicode或是Ansi的字符串转化成utf-8的形式

即:如何做成有汉字等不乱码的utf-8文件

谢谢
my email:tiger_mhu@hotmail.com
...全文
114 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ah 2004-09-24
  • 打赏
  • 举报
回复
LPWSTR CStrHandler::TransA2W(LPCSTR pszSrc,UINT uCodePage)
{
LPWSTR lpwStr = NULL;
try
{
int iLen = strlen(pszSrc);
int iSize = sizeof(WCHAR) * iLen + 1;

lpwStr = new WCHAR[iSize];
iSize = ::MultiByteToWideChar(uCodePage, 0, pszSrc,
iLen + 1, lpwStr, iSize);
}
catch(...)
{
if(lpwStr != NULL)
delete lpwStr;
lpwStr = NULL;
}
return lpwStr;
}

LPTSTR CStrHandler::TransW2A(LPWSTR src,UINT uCodePage)
{
int nSrcLen = src != NULL ? wcslen(src) * 2 : 0;

if (nSrcLen == 0) return NULL;

LPTSTR dest = new CHAR[nSrcLen + 1];

int result = ::WideCharToMultiByte(uCodePage, 0, src, -1,
dest, nSrcLen + 1, NULL, NULL);
if (result > 0)
dest[result-1] = '\0';

return dest;
}


BY_HANDLE_FILE_INFORMATION fi;
::GetFileInformationByHandle(hFile,&fi);
pBuf = new char[fi.nFileSizeLow + 1];

::SetFilePointer(hFile,0,0,FILE_BEGIN);
::ReadFile(hFile,pBuf,fi.nFileSizeLow,&dwSize,NULL);
pBuf[dwSize] = '\0';

LPWSTR pData = TransA2W(pBuf, CP_ACP);
dwSize = wcslen(pData) * sizeof(pData[0]);
delete pBuf;
pBuf = TransW2A(pData, CP_UTF8);
dwSize = strlen(pBuf);
::SetFilePointer(hFile, 0, 0, FILE_BEGIN);
::WriteFile(hFile, pBuf, dwSize, &dwSize, NULL);

snaill 2004-09-24
  • 打赏
  • 举报
回复
EF BB BF只是UTF-8的表示方式,并不代表加上文档就会转化

一般来说,从ascii到UNICODE需要使用编码表,window通过codepage来映射这种关系
你可以通过WideCharToMultiByte和MultiByteToWideChar实现转化的操作,也可以通过
Unicode.org上的对照表自己做codepage

UTF-8是UNICODE的压缩方式,其实对英文比较经济,只需要一个字节的空间,而对于中文则
需要3个字节,比UNICODE还费。转化的方式同样可以使用上面的2个函数,也可以载网上查相应的代码,不是很复杂。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧