请问 UNICODE码转换国标2312码 问题

swordliuyang 2005-12-06 01:42:33
现在有一个以文本格式存储的unicode码文件。用文本打开内容如下:
“ T e x t , f o n t s i z e = 1 6 , b o l d , c o l o r = 0 x F F 0 0 0 0 , o f f s e t = 0 |Sse鰊赗╡皶
l i n e
T e x t , f o n t t y p e = a r i a l “
其中英文字母间是空格 0x20 .
我首先将文件读入内存,然后转化0x20为0x00

后在用 WideCharToMultiByte 函数转换成国标简体中文。
此时,每到读到 0x000d 0x0d0a(4字节)时 转换成了'\n'(1字节)。
此后文本被当作0x??00 0x??00 0x??00 (?表示内容)

请问大家是怎么做到的unicode转换简体中文的 ?我刚刚接触这方面问题,请大家指教 !谢谢
...全文
242 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
aspnetwuxueyou 2005-12-09
  • 打赏
  • 举报
回复
比如说区位码中,汉字“啊”的区位码是1601,写成16进制是0x10,0x01。这和计算机广泛使用的ASCII编码冲突。为了兼容00-7f的ASCII编码,我们在区位码的高、低字节上分别加上A0。这样“啊”的编码就成为B0A1。我们将加过两个A0的编码也称为GB2312编码
aspnetwuxueyou 2005-12-09
  • 打赏
  • 举报
回复
区位码+0xa0就是gb2312编码
aspnetwuxueyou 2005-12-09
  • 打赏
  • 举报
回复
表示是中文
swordliuyang 2005-12-09
  • 打赏
  • 举报
回复
请问 str[1] > 0xa0 是什么作用啊?
yuyulily 2005-12-06
  • 打赏
  • 举报
回复
/***************************************************************
* 功 能: 将unicode字符转换成gb2312字串
* 参 数: unistr 源字串
gbstr 目标字串
msg_len 源串长度
* 返 回 值: 无
***************************************************************/
void str_unic_decode ( unsigned short *unistr,
unsigned char *gbstr,
int msg_len)
{
int i;
int index;
unsigned short ch;
unsigned char str[2];

msg_len = msg_len==-1? str_unic_len(unistr) : msg_len;
for(i=0,index=0; i<msg_len; i++)
{
ch = UNICODE_TO_GB2312[unistr[i]];
str[0] = ch & 0xff;
str[1] = ch>>8 & 0xff;
if(str[1] > 0xa0)
{
gbstr[index++] = str[0];
gbstr[index++] = str[1];
}
else
{
gbstr[index++] = str[0];
}
}
}
alloutoflove 2005-12-06
  • 打赏
  • 举报
回复
既然是Unicode文件,为什么不直接把Unicode文件读入缓冲区然后用函数进行转换, 为什么还要找0x20?
wohow 2005-12-06
  • 打赏
  • 举报
回复
把所有的0x20都转换成0,假如有一个wchar_t,高字节或低字节就是0x20,这样转换后不就错了?

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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