c++Builder中字符串转字符乱码问题

zhb28_28 2017-03-09 02:01:11
因为工作需要,要用程序改动文本文件,由于界面赋值是字符串性质,而文本文件读取函数fgets()参数必须字符数组,因此用代码转换写入文本,书写如下:
1.
UnicodeString Db = cxDBTextEdit59->Text;
//假设字符串为“因为工作需要,要用程序改动文本文件”这几个字;
AnsiString Cstr = Db; //真不懂为啥非要用UnicodeString代替以前的AnsiString,

char sch[64];
int i,j;

j= Cstr.Length();//

for(i=0;i<j;i++)
{
sch[i] = Cstr[i+1];//AnsiString的第一个下标从1开始,数组是从0开始。
}
fprintf(px,"%s",sch);///

2. UnicodeString Db = cxDBTextEdit59->Text; ;

char* cp = new char[Cstr.Length()+1];

__try
{
strcpy(cp, Cstr.c_str());
fprintf(px,"%s",sch);///
}
__finally
{
delete[] cp;
}
以上结果都无法打开文本文件,用查看器发现两种方法都赋值为乱码,希望大神帮助解答下,谢谢!!!!!!!!!

...全文
836 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
走好每一步 2017-03-18
  • 打赏
  • 举报
回复
ascci转Unicode AnsiString cStr = '123"; UnicodeString uStr = cStr; //默认帮你转了 AnsiString cStr2 = uStr .t_str(); 手动转
走好每一步 2017-03-18
  • 打赏
  • 举报
回复
另外说一下。 c++builder2007以下的 String 相当于AnsiString 所有界面的Text都是ascci c++builder2010以上的 String 相当于UnicodeString , 所有界面的Text都是unicode
走好每一步 2017-03-18
  • 打赏
  • 举报
回复
楼主要理解Unicode和ascii的本质。 c++builder为了支持多国语言,所有界面控件获取的字符串都说Unicode形式的。 比如说 UnicodeString str = "123"; 这里做了两个动作,把"123"转成了Unicode字符,再copy到str里去了。 你的写法不对,正确的写法应该是这样。 UnicodeString Db = cxDBTextEdit59->Text; AnsiString Cstr = Db.t_str() (如果你的编译器是2009版本以上的!!!)
zhb28_28 2017-03-14
  • 打赏
  • 举报
回复
引用 3 楼 draculamx 的回复:
你应该先弄清楚你的文本文件是什么格式的,文本文件也有ascii和unicode之分的。。
谢谢,我再弄弄
draculamx 2017-03-14
  • 打赏
  • 举报
回复
你应该先弄清楚你的文本文件是什么格式的,文本文件也有ascii和unicode之分的。。
zhb28_28 2017-03-09
  • 打赏
  • 举报
回复
谢谢楼上的,可是都是错误的提示,赋值进去执行程序都是乱码
geochway 2017-03-09
  • 打赏
  • 举报
回复
应该都没有问题,以第二种为例: UnicodeString Db = Edit1->Text; FILE *px=fopen("temp.txt","w"); AnsiString Cstr = Db; char* cp = new char[Cstr.Length()+1]; __try { strcpy(cp, Cstr.c_str()); fprintf(px,"%s",cp); //不是sch } __finally { delete[] cp; } fclose(px);

13,873

社区成员

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

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