unicode编码转换成GBK编码的算法,用C如何实现?

wen587420051 2007-10-22 02:27:00
unicode编码转换成GBK编码的算法,用C如何实现?

如题,这个算法如何实现?谢谢 !!!
...全文
1988 46 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
wen587420051 2007-10-24
  • 打赏
  • 举报
回复
加了,不好意思,学习习惯不好!!改正!!!


还有个问题,我调了很久, string 转换成wchar_t
iambic 2007-10-24
  • 打赏
  • 举报
回复
iconv
goole
xinai0521 2007-10-24
  • 打赏
  • 举报
回复
wen587420051 LZ。
!如果你要自己做一个GBK与UNICODE转换的话(没有系统平台给你依托),就是用查表法,GBK与UNICODE码对应该你可以上UNICODE网站去下载~有的~(网站也有,如果找不到,我可以发给你 MSN:songxinai0521@hotmail.com)
如果WINDOWS下面的话。用WideCharToMultiByte和MultiByteToWideChar函数! 就可以搞定了~
具体参数见MSDN或者上网查一查,有很多说明的。不难!
多做多想之后再问~
danteliujie 2007-10-24
  • 打赏
  • 举报
回复


string str;
whcar_t *p = str.c_str();
wen587420051 2007-10-24
  • 打赏
  • 举报
回复
STL还不是很了解,学这个要看哪些资料?

wstring ws(s.begin(), s.end()); WS里的东西每次结果都不一样,也不是正确的,怎样获取这个变了的值?谢谢!
iambic 2007-10-24
  • 打赏
  • 举报
回复
string s;
wstring ws(s.begin(), s.end());
yixiao386 2007-10-23
  • 打赏
  • 举报
回复
不好意思,我说的确实是linux下的 不过windows下的也有的 按照20楼朋友说的操作就可以了 或者去网上再找下win32下的转换函数
xinai0521 2007-10-23
  • 打赏
  • 举报
回复
除了查表,可以说别无它法!
你去看看LINUX源实现!就知道了。。WINDOWS的API实现也是一样的,通过查表求出来。
/linux-2.4.34.1/fs/nls(你可以去看Fodora6,他支持GBK13800),很有仔细实现方法!都是用查表法去实现的。!
zhangyanli 2007-10-23
  • 打赏
  • 举报
回复
想问一下,这些问题作什么用啊

我怎么从来没碰到过啊
loops 2007-10-23
  • 打赏
  • 举报
回复
0xFFFE是UTF-16 的BOM, 用来标识下面的内容是个UTF-16的串,一般都放在文件的最开始的两个字节。
danteliujie 2007-10-23
  • 打赏
  • 举报
回复

顶,同问25楼的问题,哪个0xFFFE是什么东西?
danteliujie 2007-10-23
  • 打赏
  • 举报
回复


汗,你到msdn2.microsoft.com上去看搜索以下这个函数名就可以得到相关的所有内容
wen587420051 2007-10-23
  • 打赏
  • 举报
回复
谁知道WideCharToMultiByte 方法的具体参数,有些看着不明白,为什么根据那几个数字就可以....换成其他的编码转换需要哪些参数??谢谢
wen587420051 2007-10-23
  • 打赏
  • 举报
回复
to:xinai0521


很多人都说用查表方法 ,具体应该从哪着手做????


哪种方法最好!!~~```我只是做个接口而已.
wen587420051 2007-10-23
  • 打赏
  • 举报
回复
一个去掉0xFF0xFE 的 unicode编码进去,能得到一个正确对应的ASCII码.
danteliujie 2007-10-23
  • 打赏
  • 举报
回复

不太了解状况,去掉0xFF0xFE对了?
还有什么不对?
wen587420051 2007-10-23
  • 打赏
  • 举报
回复
to: danteLiujie

去掉0xFF0xFE测试了一些汉字是对的!!!感谢!!~~````我再看看其他的.
#include <Windows.h>

#define CODE_PAGE_GB18030 54936

int Unicode2GBK( wchar_t *pUnicode, char** ppDest)
{
// get the size of the dest string
const int size = ::WideCharToMultiByte( CODE_PAGE_GB18030,
0/* you can do more for it*/, pUnicode, -1, 0, 0, 0, 0 );

if ( size == 0 )
{
return -1;
}
char* pDestString = new char[size + 2];
::memset( pDestString, 0, sizeof(pDestString) );

// transform
int ret = ::WideCharToMultiByte( CODE_PAGE_GB18030, 0, pUnicode, -1, pDestString, size, 0, 0 );

if( ret == 0 )
{
delete pDestString;
return -1;
}
else
{
*ppDest = pDestString;
return 0;
}
}
danteliujie 2007-10-23
  • 打赏
  • 举报
回复


to:wen587420051
怎么不对了?呵呵,又没有试过把加上或者去掉0xFF0xFE,又没有用过loops的程序,呵呵,又没有全部读懂啊,呵呵,耐心,现在至少能出来东西,
想办法验证输入的字符是不是Unicode,最好能找各种字符的码字比较表来看转出来的结果是不是对
先写一个不与你的软件其他部分相关的的程序,贴出来让大家帮你查错误
danteliujie 2007-10-23
  • 打赏
  • 举报
回复

回zhangyanli,我遇到过是在两种情况,第一次是某次需要一种字库,但是对方是用unicode索引的,而我只有GB2312
第二次是做一个下载程序,得到的地址千奇百怪,要转换才能用
wen587420051 2007-10-23
  • 打赏
  • 举报
回复
to:danteLiujie


调出来的结果不对...
加载更多回复(26)

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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