关于fputws写入UNICODE字符串,但是却只能得到ANSI字符

alphapaopao 2006-03-31 10:27:31
fputws(_T("ab啊d"), pFile);

所得到的文本文件,用十六进制 ultraeditor 观察,发现只有两个字节,分别是 ASCII 的 'a' 和 'b'。

这是为什么呢?


(我又来了。有问题就来了)
...全文
360 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
klkvc386 2010-06-07
  • 打赏
  • 举报
回复
文件前不是有 FF FE 等来区别的吗
使用时,写入就行了
zxdlms 2010-06-07
  • 打赏
  • 举报
回复
版主可能会来结。
zhou1xp 2010-06-07
  • 打赏
  • 举报
回复
这个帖子还会结??
  • 打赏
  • 举报
回复
呃,fopen的时候指定使用unicode
类似
fopen( "fopen_test.xml","wt+,ccs=UNICODE")
Eleven 2010-06-07
  • 打赏
  • 举报
回复
06年的帖子都被挖出来了,不得不佩服ls兄弟的干劲。。。
HUALUHLC 2010-06-07
  • 打赏
  • 举报
回复
用 二进制形式打开文件就行了
即fopen中的模式是wb 而不是w
xenix 2006-04-07
  • 打赏
  • 举报
回复
fopen 也有一个对应的宽字符版本
vcmute 2006-04-02
  • 打赏
  • 举报
回复
所以要么用bin二进制方式,要么用sprintf等
if (!(str->_flag & _IOSTRG) && (_osfile_safe(_fileno(str)) & FTEXT))
{
int size;
char mbc[4];

/* text (multi-byte) mode */
if ((size = wctomb(mbc, ch)) == -1)
alphapaopao 2006-04-01
  • 打赏
  • 举报
回复
setlocale(LC_ALL,"Chinese_china"); 设置了这个,fputws 将形成正确的 mcbs,不是 unicode 哦
vcmute 2006-04-01
  • 打赏
  • 举报
回复
但wctomb不一定成功切换到对应的codepage,所以只写到两个字母。

必须要设置 setlocale(LC_CTYPE, "Chinese");
vcmute 2006-04-01
  • 打赏
  • 举报
回复
fwrite实际上是通过二进制写入,fputws中会调用wctomb切换
alphapaopao 2006-04-01
  • 打赏
  • 举报
回复
http://spaces.msn.com/alphasun/blog/cns!705A0F31B3F031CC!278.entry

临床试验得到的结果 : Unicode文本编程笔记
alphapaopao 2006-04-01
  • 打赏
  • 举报
回复
ft 仔细看了一下

“copies the wide-character argument str to stream as a multibyte-character ”在文本模式下。

文档中的这句话是什么意思?难道真的是转换成了 mbcs?
xing_xing_xing 2006-04-01
  • 打赏
  • 举报
回复

setlocale(LC_ALL,"Chinese_china"); //这样设置就可以了
FILE *fp = fopen("1.txt","w");
fputws(L"ab啊d", fp);
fclose(fp);
fanzai 2006-04-01
  • 打赏
  • 举报
回复
我用_putws输出文本也遇到了同样的问题,即使设置了setlocale(LC_CTYPE, "Chinese");,也不能解决。
好像遇到某些字符转换就会中断,不明白~~
alphapaopao 2006-03-31
  • 打赏
  • 举报
回复
忘了说了。开发环境 vc8, 工程设置 unicode。

vcmute:
就是用 十六进只看的。

xing_xing_xing(ζ未名ζ) :
难道这个函数自动转换成 mbcs? 也不对,因为我在文本文件中只看到两个字母。


另外,我用 fwrite(L"aa阿") 这样 就很好,能得到 unicode 文本文件。
xing_xing_xing 2006-03-31
  • 打赏
  • 举报
回复
fputws copies the wide-character argument string to stream as a multibyte-character string or a wide-character string according to whether stream is opened in text mode or binary mode, respectively.

FILE *fp = fopen("1.txt","wb");
fputws(L"ab啊d", fp);
fclose(fp);
vcmute 2006-03-31
  • 打赏
  • 举报
回复
ultraeditor 能自动识别Unicode编码

请Ctrl+H切换到二进制显示来查看

16,548

社区成员

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

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

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