Codierung cp-1252 utf-8?
Bin ich zu schreiben versucht, eine Java-Anwendung, läuft auf einem linux-server aber das wird Prozess-Dateien generiert, die auf älteren Windows-Rechner mit cp-1252 als Zeichensatz. Ist es irgendwie codieren diese Dateien als utf-8 anstelle der cp-1252 ist es generiert?
Diese Frage ist nicht beantwortbar, wie geschrieben... es hängt ganz davon ab, was verwendet wird um diese Dateien zu erzeugen (und Sie sagen nicht uns). Wenn es Excel 2007, dann die Antwort ist keine.
Aber Java sollte in der Lage sein, um Sie zu verarbeiten, Windows Dateien in Ordnung, die richtigen encoding-Parameter.
Danke @theglauber (+2) - können Sie erklären, warum Excel 2007 wäre ein dealbreaker? Auch können Sie uns ein Beispiel für die korrekte Kodierung der Parameter? Nochmals vielen Dank!
Nur ich spreche aus Erfahrung und frustration. Sie können nicht die Kodierung angeben, die für eine csv-Datei in Excel 2007. In Java würden Sie einen InputStreamReader mit der richtigen Codierung ("Windows-1252") gebaut, das oben auf einem FileInputStream.
Danke @theglauber - können Sie bitte Lesen Sie meinen Kommentar unter Erich Grunzke Antwort. Hat Ihre Empfehlung über mein problem zu lösen?
Aber Java sollte in der Lage sein, um Sie zu verarbeiten, Windows Dateien in Ordnung, die richtigen encoding-Parameter.
Danke @theglauber (+2) - können Sie erklären, warum Excel 2007 wäre ein dealbreaker? Auch können Sie uns ein Beispiel für die korrekte Kodierung der Parameter? Nochmals vielen Dank!
Nur ich spreche aus Erfahrung und frustration. Sie können nicht die Kodierung angeben, die für eine csv-Datei in Excel 2007. In Java würden Sie einen InputStreamReader mit der richtigen Codierung ("Windows-1252") gebaut, das oben auf einem FileInputStream.
Danke @theglauber - können Sie bitte Lesen Sie meinen Kommentar unter Erich Grunzke Antwort. Hat Ihre Empfehlung über mein problem zu lösen?
InformationsquelleAutor IAmYourFaja | 2012-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Lesen und schreiben von text-Daten in einer beliebigen Codierung, die Sie wünschen. Hier ist eine kurze code-Beispiel:
Wenn diese immer noch "drosseln" auf Lesen, sehen Sie, wenn Sie können, stellen Sie sicher, dass das die ursprüngliche Codierung, was Sie denken, es ist. In diesem Fall habe ich angegeben, windows-1252, das ist der java-string für cp-1252.
SomeWindowsFile.txt
) enthält ein CP-1252-Zeichen, das macht die Java -Reader
ersticken. Also die eigentliche Frage: wie liest man eine Datei, deren Dateiname macht Java-choke, wegen einem "illegalen" Charakter? nochmals vielen Dank!Sie hoffen, dass dies unter Windows laufen, da CP-1252 ist mehr als wahrscheinlich, dass nicht wird der Standard-text-Datei-Codierung, die in anderen Kontexten. Besser
new InputStreamReader(new FileInputStream(file, "Win1252"))
wie macht es
Reader
choke genau? Können, demonstrieren Sie mit einem SSCCE?Ich aktualisiert code-Beispiel, um zu zeigen, wie Sie erzwingen eine Verschlüsselung, die in den Leser. Veer Frage ist gut: ich bin neugierig, was du damit meinst "choke" und wenn dies behebt das problem.
Tut mir Leid, habe ich falsch verstanden, Ihr Kommentar. Sie haben Probleme mit Sonderzeichen in der Datei name, nicht die Datei data. Das ist schwieriger. Ich würde vorschlagen, versuchen Joni Lösung von Einstellung -Dfile.encoding= " windows-1252. Auch können Sie versuchen, die neue Datei ("/Elternteil/dir").Liste() und sehen, ob Java ist die Interpretation der mit dem Namen in einer anderen Weise.
InformationsquelleAutor Eric Grunzke
Wenn die Dateinamen sowie Inhalten ist ein problem, der einfachste Weg, um das problem zu lösen ist die Einstellung der
locale
auf der Linux-Maschine, die auf etwas basiert aufISO-8859-1
eher alsUTF-8
. Sie könnenlocale -a
um eine Liste der verfügbaren locales. Zum Beispiel, wenn Sie habenen_US.iso88591
Sie verwenden könnten:Diese Weise Java verwenden ISO-8859-1 für die Datei-Namen, die ist wahrscheinlich gut genug. Um das Java-Programm noch nicht festgelegt ist die
file.encoding
- system Eigenschaft:Wenn kein ISO-8859-1 locale verfügbar ist, können Sie erzeugen eine mit
localedef
. Die Installation erfordert root-Zugriff aber. In der Tat, Sie könnten erzeugen ein Gebietsschema mit CP-1252, falls es auf Ihrem system verfügbar ist. Zum Beispiel:Diese Weise Java verwenden sollten, CP1252, die standardmäßig für alle I/O, einschließlich Dateinamen.
Weiter ausgebaut hier: http://jonisalonen.com/2012/java-and-file-names-with-invalid-characters/
InformationsquelleAutor Joni