zoukankan      html  css  js  c++  java
  • delphi TEncoding

    #include <tchar.h>
    #include <memory>       //For STL auto_ptr class
    //---------------------------------------------------------------------------
     
    #pragma argsused
    int _tmain(int argc, _TCHAR* argv[])
    {
      // Sample to convert a file of any encoding to UTF8
      TEncoding *LEncoding = NULL;
      std::auto_ptr<TFileStream> LFileStream(new TFileStream("..\Sample.txt", fmOpenRead));
     
      // Read file into buffer.
      TBytes myBytes;
      std::auto_ptr<TBytesStream> myBytesStream(new TBytesStream(myBytes));
      myBytesStream->CopyFrom(LFileStream.get(), LFileStream->Size);
     
      // Identify encoding and convert buffer to UTF8.
      int LOffset = TEncoding::GetBufferEncoding(myBytesStream->Bytes, LEncoding);
      if (LOffset == 0)
        return 1; // Unknown encoding; do not convert.
      myBytes = TEncoding::Convert(LEncoding, TEncoding::UTF8,
                                   myBytesStream->Bytes,
                                   LOffset, myBytesStream->Size-LOffset);
      // Create output file.
      std::auto_ptr<TFileStream> DestFileStream(new TFileStream("..\SampleUTF8.txt", fmCreate));
     
      // Write UTF8 byte-order mark and buffer to output file.
      TBytes LByteOrderMark;
      LByteOrderMark = TEncoding::UTF8->GetPreamble();
     
      // Grab preamble and write to destination.
      DestFileStream->Write(&LByteOrderMark[0], LByteOrderMark.Length);
     
      // Write converted buffer.
      DestFileStream->Write(&myBytes[0], myBytes.Length);
      return 0;
    }
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      // You may need to change this path to suit your environment.
      String Path = "../../"+Edit1->Text;
      Memo1->Lines->LoadFromFile(Path);
      if (Memo1->Lines->Encoding != NULL)
        Edit2->Text = Memo1->Lines->Encoding->EncodingName;
      Memo1->ScrollBars = ssVertical;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      // You may need to change this path to suit your environment.
      TEncoding *myEncoding;
      String Path = "../../"+Edit1->Text;
      myEncoding = TEncoding::Default;
      if (Edit2->Text == "ASCII") myEncoding = TEncoding::ASCII;
      if (Edit2->Text == "BigEndianUnicode") myEncoding = TEncoding::BigEndianUnicode;
      if (Edit2->Text == "Default") myEncoding = TEncoding::Default;
      if (Edit2->Text == "Unicode") myEncoding = TEncoding::Unicode;
    // Do not use UTF7 for this.  It does not have a BOM, and so the encoding cannot be detected on a load.
    //  if (Edit2->Text == "UTF7") then myEncoding = TEncoding::UTF7;
      if (Edit2->Text == "UTF8") myEncoding = TEncoding::UTF8;
      Memo1->Lines->SaveToFile(Path, myEncoding);
    }

    Default是936   (ANSI/OEM - 简体中文 GBK)

      Memo1->Lines->SaveToFile(FileName,TEncoding::UTF8);

    Memo1->Lines->WriteBOM=false; //utf8  BOM

    gb2312,它的代码页是936

    uses System.SysUtils

    Str:=  TEncoding.Default.GetString(finallyByte);

  • 相关阅读:
    按属性分割要素
    python os.path模块
    用数组显示裴波那契数列
    计算两位数的加减乘除
    输入一串数字统计0到9每个数字的个数
    开辟新空间输入成绩
    关系表达式、条件表达式、逻辑表达式
    变量、函数和程序控制
    哥德巴赫定理
    找出二维数组中最大的值
  • 原文地址:https://www.cnblogs.com/cb168/p/4276408.html
Copyright © 2011-2022 走看看