Hoe kan een tekst bestand worden geconverteerd van ANSI naar UTF-8 met Delphi 7?

Ik een programma geschreven met Delphi 7 welke zoekopdrachten *.srt bestanden op een harde schijf. Dit programma bevat het pad en de naam van deze bestanden in een memo. Nu moet ik deze omzetten van bestanden van ANSI naar UTF-8, maar ik heb nog niet gelukt.

  • ANSI is niet echt een goed karakter codering naam; Windows in het algemeen maakt gebruik van “ANSI” te betekenen Windows-1252. stackoverflow.com/questions/701882
  • Windows gebruiken “ANSI” om te verstaan wat uw landinstelling wordt. Het zou SJIS voor de japanse windows-gebruiker; GB2312 voor S-Chinees windows-gebruiker, enz…
  • Wilt u alstublieft uitleggen wat er precies gebeurt, dus je “niet geslaagd”?
InformationsquelleAutor | 2009-04-02

 

5 Replies
  1. 9

    De Utf8Encode functie neemt een WideString string als parameter en geeft een Utf-8 string.

    Voorbeeld:

    procedure ConvertANSIFileToUTF8File(AInputFileName, AOutputFileName: TFileName);
    var
      Strings: TStrings;
    begin
      Strings := TStringList.Create;
      try
        Strings.LoadFromFile(AInputFileName);
        Strings.Text := UTF8Encode(Strings.Text);
        Strings.SaveToFile(AOutputFileName);
      finally
        Strings.Free;
      end;
    end;
    • De OP tagged de vraag delphi-7. In Delphi 7, strijkers als ANSU standaard, zodat de snaren bestaande in TStringList zijn ook ANSI. Weet je zeker dat dit zal werken?
    • ja (ik neem aan dat de bestanden die zijn gecreëerd met gebruik van dezelfde standaard ANSI-code van de pagina die wordt gebruikt door de Delphi-programma)
  2. 1

    Een kijkje nemen op GpTextStream die eruit ziet als het werken met Delphi 7. Het heeft de mogelijkheid om te lezen/schrijven van unicode-bestanden in oudere versies van Delphi (hoewel werkt met Delphi 2009) en moeten helpen met uw conversie.

  3. 0
    var
      Latin1Encoding: TEncoding;
    begin
      Latin1Encoding := TEncoding.GetEncoding(28591);
      try
           MyTStringList.SaveToFile('some file.txt', Latin1Encoding);
      finally
          Latin1Encoding.Free;
      end;
    end;
    • Dit is Delphi 2009.
  4. 0

    Lees het hele antwoord voordat u begint te programmeren.


    Het juiste antwoord op vraagen het is niet gemakkelijk een – in principe bestaan van de boom stappen:

    1. Je bepalen de ANSI-codetabel gebruikt op uw computer. U kunt dit doel bereiken door het gebruik van de GetACP () – functie van Windows API. (Belangrijk: u aan het ophalen van de codepage zo spoedig mogelijk na de naam van het bestand ophalen, omdat het kan worden gewijzigd door de gebruiker.)
    2. U moet zetten om uw ANSI-Unicode-tekenreeks door te bellen MultiByteToWideChar() Windows API-functie met de juiste Codepagina parameter (opgehaald in de vorige stap). Na deze stap moet je een UTF-16 string (bijna een WideString) met de lijst bestandsnaam.
    3. Je hebt om te zetten in de Unicode-tekenreeks naar UTF-8 UTF8Encode() of de WideCharToMultiByte() Windows API. Deze functie retourneert een UTF-8 string u nodig.

    Maar deze oplossing zal de terugkeer van een UTF-8 string met de input-ANSI-string, dit is waarschijnlijk niet de beste manier om problemen op te lossen, omdat de namen van de bestanden kan al worden beschadigd wanneer u de ANSI-functies keerde terug, dus juiste bestandsnamen worden niet gegarandeerd.


    De juiste oplossing voor uw probleem manieren is meer ingewikkeld:

    Als u wilt worden zeker dat uw bestand lijst is precies schoon, je moet zorgen dat het niet zal krijgen geconverteerd naar ANSI op alle. U kunt dit doen door expliciet af met de “W” – versie van het bestand afhandeling van API ‘ s. In dit geval is er – natuurlijk – u kunt geen gebruik maken van TFileStream en andere ANSI-bestand hanteren van objecten, maar de Windows API-aanroepen direct.

    Het is niet dat hard, maar als je al een complex raamwerk gebouwd op bijvoorbeeld TFileStream het zou een beetje van een pijn in de @ss. In dit geval de beste oplossing is voor het maken van een TStream afstammeling die gebruik maakt van de juiste API ‘ s.

    Ik hoop dat mijn antwoord je helpt of iedereen die te maken heeft met hetzelfde probleem. (Ik had niet zo lang geleden.)

    • De vraag is over het converteren van de inhoud van het bestand van ANSI naar UTF-8, de namen van de bestanden (in het memo-veld) zijn een andere vraag iiuc
    • Nee. In de vraag Yilmaz Ekici schreef over een lijst met bestanden in de memo “Dit programma bevat het pad en de naam van deze bestanden in een memo.” , niet over de inhoud van een bestand. Nu (s)hij misschien wilde vragen over de inhoud van het bestand conversie, maar hij deed het niet.
    • 1) de vraag titel begint met How can a text file be converted ... 2) na de vermelding van de lijst, de vraag blijft met I need convert these files.
  5. -1

    Wist je dat ASCII?

    ASCII is compatibel met de UTF-8.
    http://en.wikipedia.org/wiki/UTF-8

    • Nee, ik bedoel ANSI. Open een txt-bestand.(kladblok) Bestand—-> opslaan als ——-> encoding ——> ANSI-of UTF-8 of… —-> BEWAAR ik hoop dat dit helpt om te zien dat mijn doel is…

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *