DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: xieqiongxi1
今日帖子: 0
在线用户: 5
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 ken0137 (顺眼即佛) ★☆☆☆☆ -
普通会员
2019/12/5 14:00:23
标题:
有什么方式可以在保存文本文件时设定文本的编码格式 浏览:1279
加入我的收藏
楼主: 好,我使用Delphi7在Win10下,不管新建还是使用控件的SaveToFile,保存的文本文件默认的编码格式都是UTF-8,那么有没有什么方法可以在保存时设定文本的编码格式?

2、有什么方法可以读取到文本文件的编码,我在网上找了一点,但是都是无效的
比如下面这个,读出来都是Ansi格式
http://bbs.2ccc.com/topic.asp?topicid=507943
----------------------------------------------
只会简单使用,并未精通深入
作者:
男 joman (joman) ▲▲▲▲▲ -
普通会员
2019/12/5 14:56:23
1楼:   if dlgSave1.Execute then
  begin
    mmo1.Lines.SaveToFile(dlgSave1.FileName+'.txt', TEncoding.UTF8);
  end;
----------------------------------------------
DelphiWeb开发方案(开源):https://gitee.com/pearroom/DelphiWebMVC
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2019/12/5 15:15:03
2楼: 楼上的,楼主用Delphi7是没有TEncoding的~o~
楼主的问题描述得不准确,Delphi7保存文件时默认格式都是Ansi的,可能你保存的是英文文档,那样和没有文件的UTF8就是一样的。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/12/5 16:18:53
3楼: TMS UNICODE
TNT
按此在新窗口浏览图片
code page
https://www.cnblogs.com/kmhr/p/8443967.html

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&ch=&tn=baidu&bar=&wd=delphi7+code+page&oq=delphi%2520code%2520page&rsv_pq=a3a2d7b50000d03e&rsv_t=b46ewI7gi7yDvAICnghJ2UjHg7WCXeSYML%2F31h7x%2BV5NPGaUQ2in%2Bebagag&rqlang=cn&rsv_enter=1&rsv_dl=tb&inputT=631
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/12/5 16:25:10
4楼: { V1.4        ---2014.1010----
  1.D7(delphi2007)之前的memo等都只支持AnsiString;本单元主要为<=D7的使用;仅此纪念D7的了;
 2. 因Delphi 2010之后的默认字符集都是Unicode了,简化了很多(主要使用了TEncoding类);
  Memo可以直接支持读入ASCII,UTF-8,Unicode;写则可以指定写入的编码格式。
 3.在中文操作系统下,D7默认使用的GB2312字符集,故AnsiString的字符集可看做GB2312;
 缺省的编译选项下,编译器认为String就是AnsiString字符串(可以使用$H编译开关来进行修改),保存就是ASCII。
 4.D7前的widestring实际就是Unicode字符,默认string等同于AnsiString。参见CoderOfUnicode。
 5.觉得最重要的是理解到字符存为2进制按Byte放置的,所以,字符的1个Byte内容可转为2位HexStr;
   同样,2位HexStr可转换为1字节内容(对这些连续的Byte可根据Ansi,UTF8,Unicode解码 就得到对应的字符的)。
   这种方式才是最值得提倡的和便于理解的。 Byte为1字节可直接将小于255的值直接赋给它,intger,char,Hex值等;
   如:ABtye :=255; $FF; Byte('A');
 6.个人觉得转码实际就是byte的操作,用Byte来做转换方便得多的(Byte  0..255,小于256的整数赋值给byte就是操作Byte的了)。
   比如我写的coderToUTF8Str。
 7.注意:Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。所以,Big endian方式
   是所见即所得,即编码'一':U4E 00;BE方式存储后用UltraEdit打开也是4E 00(先存高字节);但Little endian方式存储后则为
   00 4E(先存小端低字节00);

 2013-11-28


Notepad(记事本)只支持四种格式:ANSI/Unicode/Unicode big endian/UFT-8,在Delphi中如何判断与读取这些不同格式的文本呢?

首先,不同编码的文本,是根据文本的前两个字节来定义其编码格式的。定义如下:

ANSI: 无格式定义;
Unicode: 前两个字节为FFFE;
Unicode big endian: 前两字节为FEFF; 
UTF-8: 前两字节为EFBB; 实际前3字节为EF BB BF
}

好人没留名。。
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 ken0137 (顺眼即佛) ★☆☆☆☆ -
普通会员
2019/12/5 16:30:33
5楼: 谢谢各位的回复
关于第一个问题,后来发现可以使用TMemoryStream来生成文本文件
function CreateFile(TextFormat,sText,FileName:string):Boolean;
var
  MemStream: TMemoryStream;
  HeaderStr:string;
  WStr: WideString;
begin
  Result:=False;
  try
    MemStream := TMemoryStream.Create;
    try
      if TextFormat='ANSI' then
        MemStream.Write(sText[1], Length(sText))
      else if TextFormat='UTF-8' then
      begin  //生成的文件编码:带有BOM的UTF-8
        HeaderStr:=#$EF#$BB#$BF;
        MemStream.Write(HeaderStr[1], 3);
        sText := AnsiToUtf8(sText);
        MemStream.Write(sText[1], Length(sText));
      end else if TextFormat='Unicode' then
      begin //生成的文件编码:UTF-16 LE
        HeaderStr := #$FF#$FE;
        MemStream.Write(HeaderStr[1], 2);
        WStr := WideString(sText);
        MemStream.Write(WStr[1], Length(WStr)*2);
      end else Exit;
      MemStream.Position := 0;
      MemStream.SaveToFile(FileName);
    except
    end;
  finally
    MemStream.Free;
  end;
  Result:=True;
end;
----------------------------------------------
只会简单使用,并未精通深入
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2019/12/5 18:15:28
6楼: 3 楼就是答案。楼主不信结果就是写一堆垃圾代码。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2019/12/5 18:32:15
7楼: 1 楼就是答案。楼主不信结果就是写一堆垃圾代码。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.06836毫秒 RSS