Tekstbestand coderen naar UTF_8?

Ik schrijf een Java-project dat e-mails met bijlagen verzendt.

In mijn testcase voeg ik enkele Japanse woorden 'some Hiraganas and Katakanas' toe aan mijn bijgevoegde testfile.txt (die ik heb opgeslagen in UTF-8-codering.)

Maar als ik mijn testmail naar mezelf stuur, nadat ik het bijgevoegde testbestand.txt heb geopend, wordt elke Japanse Chars '????'.

Dus ik vraag me gewoon af waarom dit gebeurt ...?

Dank je

Allan

Postscriptum om meer specifiek te zijn, hier is mijn code. Ik gebruik mail.jar om e-mail te verzenden.

Hier is hoe ik het bestand krijg:

/**
 * Add an attachment to the Email.
 * @param filePath
 */
public void setFile(String filePath){

    attachment = new File(filePath);

}

en hieronder is hoe ik het bestand bijvoeg in mijn MIME-e-mailgedeelte.

/*Add attachment if an attachment is given.*/
    if(attachment != null){
    MimeBodyPart attachmentPart = new MimeBodyPart();
    attachmentPart.attachFile(attachment);
    multipart.addBodyPart(attachmentPart);
    }
0
Kun je specifieker zijn? Hoe opent u het e-mail-/testbestand? Kun je wat codefragmenten plaatsen?
toegevoegd de auteur alexvetter, de bron

2 antwoord

U moet ervoor zorgen dat u het bestand leest en schrijft met de juiste tekenset.

D.w.z. dus niet zo, die de standaard charset van het platform zou gebruiken:

Reader reader = new FileReader("/testfile.txt");
// ...

Maar meer nog, met behulp van InputStreamReader waarin u expliciet de juiste charset opgeeft:

Reader reader = new InputStreamReader(new FileInputStream("/testfile.txt"), "UTF-8");
// ...

In de Content-Type header van de e-mailbijlage moet je ook het charset attribuut instellen en moet je de bijlage wegschrijven met behulp van UTF-8. Verdere details kunnen niet worden gegeven omdat het onduidelijk is welke mail-API u gebruikt. Als alternatief kun je ook vasthouden aan het gebruik van InputStream / OutputStream alleen omdat dat de inhoud zou streamen als pure bytes en dus geen invloed zou hebben op de tekenset die de bytes vertegenwoordigen.


Update: you're using Javamail's MimeBodyPart without explicitly specifying the content type with the charset attribute. Now you're dependent on the mail client whether it treats the content as UTF-8 or not. Fix it as follows:

MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(attachment);
attachmentPart.setHeader("Content-Type", "text/plain;charset=utf-8");
multipart.addBodyPart(attachmentPart);
6
toegevoegd
@mortensi: dat antwoordt tijdelijke oplossingen (niet op te lossen!) een heel ander probleem.
toegevoegd de auteur BalusC, de bron
Dit antwoord lijkt beter te werken: stackoverflow.com/vragen/4960556/& hellip;
toegevoegd de auteur mortensi, de bron
Ik heb geprobeerd een HTML-bestand (als bijlage) te verzenden met enkele Scandinavische tekens erin. Ik heb er een tijdje mee geworsteld en de bovenstaande link loste de zaak voor mij op.
toegevoegd de auteur mortensi, de bron

This thread seems to address setting the characters set correctly for mime body content (last comment).

0
toegevoegd