LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 742|回复: 3

[求助]关于把unicode字串写入文件

[复制链接]
发表于 2007-2-28 14:42:12 | 显示全部楼层 |阅读模式
小弟第一次在C里接触unicode,遇到了个小问题,还望大家多指点

这是我写的代码:
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>

int main(void)
{
        wchar_t wstr[] = L"测试";
        int fp;
       
        wprintf(L"%ls\n",wstr);
       
        fp = creat("unifile",0777);
        write(fp, wstr, wcslen(wstr));
        close(fp);

        return 0;
}

编绎没问题,运行也没报错,可是用十六进制打开写入的文件却发现只写入了“测”的unicode码,为什么不是“测试"的unicode码呢?
发表于 2007-2-28 15:44:03 | 显示全部楼层
Post by 蝙蝠无声
小弟第一次在C里接触unicode,遇到了个小问题,还望大家多指点

这是我写的代码:
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>

int main(void)
{
        wchar_t wstr[] = L"测试";
        int fp;
       
        wprintf(L"%ls\n",wstr);
       
        fp = creat("unifile",0777);
        write(fp, wstr, wcslen(wstr));
        close(fp);

        return 0;
}

编绎没问题,运行也没报错,可是用十六进制打开写入的文件却发现只写入了“测”的unicode码,为什么不是“测试"的unicode码呢?

wcslen这个函数我记得是报告字符个数的,你需要*sizeof(wchar_t)。
回复 支持 反对

使用道具 举报

发表于 2007-2-28 16:51:09 | 显示全部楼层
wcslen 返回 wchar_t 数组的长度,在你的程序里面 wcslen 正好返回 2,而 gcc 里面的 sizeof(wchar_t) 实际上是 4 个字节,因为 write 是以字节为单位的,我想如果换到 big endian 的机器上的话很可能写出的东西就不一样了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-28 17:11:59 | 显示全部楼层
明白了,谢谢楼上两位
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表