单字节转双字节并输出到文件

gangliao 2006-03-27 06:08:13
我在写一个读取别人文件的程序的时候,发现不管怎么样,我写的文件别人的程序就是不读,而它自己生成的就可以,后来用记事本打开发现内容一样,但我写的文件程序还是不能读,后来用ultraedit发现程序生成的文件所有的字符都是占两个字节的,有没有人能告诉我,怎么把单字节转换成双字节,并且也写到文件里去啊?我用的是VC6,生成的文件用ultraedit另存为一个utf8的格式,程序就能读了,但是在我自己的程序里怎么实现呢??是不是ofstream还有什么参数之类的??
...全文
666 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddmor 2006-04-04
  • 打赏
  • 举报
回复
这是没有理解文本字符编码而引出的问题。读取文本数据前需要确定文本中字符的编码,然后再判断你期望使用的字符编码和该编码是否一致,再进行字符编码转换。
字符的转换需要借助系统api函数来解决,比如
MultiByteToWideChar// 多字节字符编码到宽字节字符编码
WideCharToMultiByte// 宽字节字符编码到多字节字符编码
,当然也可以自行设计转换,比如iso8859,utf-8,utf-16(unicode)之间可以方便转换,而gb2312到utf编码系列的转换就需要字符映射了,所以系统功能调用是最常用方便的用法。
gangliao 2006-04-04
  • 打赏
  • 举报
回复
可以转换,但写成的文件格式还是dos方式,而我用java就可以写成utf8-dos模式,用utraledit打开的时候就可以看得很清楚!
Torrice 2006-03-29
  • 打赏
  • 举报
回复
msdn转换的例子:
#include <windows.h>
#include <lm.h>
#include <stdio.h>

BOOL GetFullName( char *UserName, char *Domain, char *dest )
{
WCHAR wszUserName[UNLEN+1]; // Unicode user name
WCHAR wszDomain[256];
LPBYTE ComputerName;

struct _SERVER_INFO_100 *si100; // Server structure
struct _USER_INFO_2 *ui; // User structure

// Convert ANSI user name and domain to Unicode

MultiByteToWideChar( CP_ACP, 0, UserName,
strlen(UserName)+1, wszUserName,
sizeof(wszUserName)/sizeof(wszUserName[0]) );
MultiByteToWideChar( CP_ACP, 0, Domain,
strlen(Domain)+1, wszDomain, sizeof(wszDomain)/sizeof(wszDomain[0]) );

// Get the computer name of a DC for the domain.

NetGetDCName( NULL, wszDomain, &ComputerName );

// Look up the user on the DC.

if( NetUserGetInfo( (LPWSTR) ComputerName,
(LPWSTR) &wszUserName, 2, (LPBYTE *) &ui ) )
{
printf( "Error getting user information.\n" );
return( FALSE );
}

// Convert the Unicode full name to ANSI.

WideCharToMultiByte( CP_ACP, 0, ui->usri2_full_name, -1,
dest, 256, NULL, NULL );

return (TRUE);
}
gangliao 2006-03-29
  • 打赏
  • 举报
回复
其实说白了就是写一个unicode或utf8的文件,我不知道怎么实现。
纪俊 2006-03-28
  • 打赏
  • 举报
回复
枪支类型转换。。。-____-
Wolf0403 2006-03-28
  • 打赏
  • 举报
回复
MultiByteToWideChar
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/unicode_17si.asp
逸学堂 2006-03-28
  • 打赏
  • 举报
回复
把自己的开发环境设置为UNICODE类型就可以了。
stormwolf 2006-03-28
  • 打赏
  • 举报
回复
不是很懂..友情帮顶一下..学习中...
fiftymetre 2006-03-27
  • 打赏
  • 举报
回复
char fiftymetre[] = new char[2*str.length()];

嘻嘻
gangliao 2006-03-27
  • 打赏
  • 举报
回复
如果能让vc自己生成一个双字节的文本文件也行!!

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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