Java BufferedWriter object met de utf-8

Ik heb de volgende code en ik wil de outputstream gebruik van utf-8. In principe heb ik tekens als é die worden weergegeven als é dus het ziet eruit als een codering probleem.

Ik heb gezien dat veel van de voorbeelden die gebruik…

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path),"UTF-8");

Mijn huidige code al is…

BufferedWriter out = new 
BufferedWriter(new FileWriter(DatabaseProps.fileLocation + "Output.xml"));

Is het mogelijk om dit object als UTF-8 zonder gebruik te maken van de OutputStreamWriter?

Bedankt,

  • Waarom kan je niet gebruik maken van een OutputStreamWriter?
  • Of beter, waarom kan je niet gebruik maken van een XML-serializer? En als u een XML-serializer, waarom ben je niet te laten omgaan met de codering?

 

4 Replies
  1. 124

    Nr. FileWriter laat je niet opgeven, de codering, dat is erg vervelend. Het maakt altijd gebruik van het systeem standaard codering. Gewoon suck it up en gebruik OutputStreamWriter het verpakken van een FileOutputStream. U kunt nog steeds wikkel de OutputStreamWriter in een BufferedWriter natuurlijk:

    BufferedWriter out = new BufferedWriter
        (new OutputStreamWriter(new FileOutputStream(path), StandardCharsets.UTF_8));

    Of als van Java 8:

    BufferedWriter out = Files.newBufferedWriter(Paths.of(path));

    (Je kunt natuurlijk ook je systeem standaard codering UTF-8, maar dat lijkt een beetje een extreme maatregel.)

    • +1 — “Just suck it up”
    • Hmm, dat heb ik gedaan maar ik krijg nog steeds é voor é. Betekent dat het probleem eerder in de stapel? In het db is opgeslagen als é, maar wanneer ik verbinding maak met jdbc:sqlserver://…… het schrijft het vinden veld é in mijn bestand. De string is niet opzettelijk wordt gewijzigd in ieder geval.
    • Het is niet duidelijk wat je bedoelt, maar niets in de code die u hebt weergegeven gaat om het maken van XML – /HTML-entiteiten voor u. Het is inderdaad klinkt als het probleem ergens anders. Ik weet zeker dat je al het é in je tekst voor u schrijven naar de gebufferde schrijver.
    • Het probleem is misschien dat het programma u om te lezen van uw bestand is niet geconfigureerd voor utf-8.
    • Ah, dank u wel, ik was niet op de hoogte moesten worden geconfigureerd bij lezen als schrijven, dank u 🙂
    • Voor toekomstige lezers, Apache Commons-IO, FileWriterWithEncoding is ook een optie
    • Ook deze dagen zou ik gewoon gebruik maken van Bestanden.newBufferedWriter – geen behoefte aan een derde partij lib.
    • 4 jr na en dit enkel en alleen mijn leven gered :). Bedankt.
    • voor het “heel vervelend”

  2. 5

    Kunt u gebruik maken van verbeterde FileWriter, verbeterd door mij.

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.nio.charset.Charset;
    
    /**
     * Created with IntelliJ IDEA.
     * User: Eugene Chipachenko
     * Date: 20.09.13
     * Time: 10:21
     */
    public class BufferedFileWriter extends OutputStreamWriter
    {
      public BufferedFileWriter( String fileName ) throws IOException
      {
        super( new FileOutputStream( fileName ), Charset.forName( "UTF-8" ) );
      }
    
      public BufferedFileWriter( String fileName, boolean append ) throws IOException
      {
        super( new FileOutputStream( fileName, append ), Charset.forName( "UTF-8" ) );
      }
    
      public BufferedFileWriter( String fileName, String charsetName, boolean append ) throws IOException
      {
        super( new FileOutputStream( fileName, append ), Charset.forName( charsetName ) );
      }
    
      public BufferedFileWriter( File file ) throws IOException
      {
        super( new FileOutputStream( file ), Charset.forName( "UTF-8" ) );
      }
    
      public BufferedFileWriter( File file, boolean append ) throws IOException
      {
        super( new FileOutputStream( file, append ), Charset.forName( "UTF-8" ) );
      }
    
      public BufferedFileWriter( File file, String charsetName, boolean append ) throws IOException
      {
        super( new FileOutputStream( file, append ), Charset.forName( charsetName ) );
      }
    }
  3. 2

    Als de documentatie voor FileWriter uitgelegd,

    De constructor van deze klasse aannemen dat het standaard karakter codering en de standaard byte buffer formaat zijn aanvaardbaar. Opgeven voor deze waarden zelf, het bouwen van een OutputStreamWriter op een FileOutputStream.

    Er is geen reden dat je niet kunt bouwen uw BufferedWriter op de top van de OutputStreamWriter al.

  4. 0

    Gebruik maken van de methode, Bestanden.newBufferedWriter(Path, Charset cs, OpenOption… opties)

    Zoals gevraagd door Toby, hier is de voorbeeld code.

    String errorFileName = (String) exchange.getIn().getHeader(HeaderKey.ERROR_FILE_NAME.getKey());
            String errorPathAndFile = dir + "/" + errorFileName;
            writer = Files.newBufferedWriter(Paths.get(errorPathAndFile),  StandardCharsets.UTF_8, StandardOpenOption.CREATE_NEW);
            try {
                writer.write(MESSAGE_HEADER + "\n");
            } finally {
                writer.close();
            }
    • Hoewel dit misschien een waardevolle hint voor het oplossen van het probleem, een goed antwoord bewijst ook de oplossing. Stuur een bewerken te verstrekken voorbeeld code om te laten zien wat je bedoelt. U kunt ook overwegen te schrijven dit als een reactie plaats.

Geef een reactie

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