578 Stimmen

Wo erhält man ein "UTF-8"-String-Literal in Java?

Ich versuche, eine Konstante anstelle eines String-Literal in diesem Stück Code zu verwenden:

new InputStreamReader(new FileInputStream(file), "UTF-8")

"UTF-8" kommt im Code recht häufig vor und sollte besser auf eine static final stattdessen eine Variable. Wissen Sie, wo ich eine solche Variable im JDK finden kann?

Übrigens, wenn ich es mir recht überlege, sind solche Konstanten schlecht konzipiert: Öffentliche statische Literale ... sind keine Lösung für Datenduplikation

11 Stimmen

Véase diese Frage .

2 Stimmen

Hinweis: Wenn Sie bereits mit Java 7 arbeiten, verwenden Sie Files.newBufferedWriter(Path path, Charset cs) von NIO.

3 Stimmen

Das ist ein wirklich schlechter Ratschlag in Ihrem Link. Er will, dass Sie eine Wrapper-Klasse für jede mögliche String-Konstante machen, die Sie verwenden könnten?

9voto

tskuzzy Punkte 35019

Es gibt keine (zumindest nicht in der Java-Standardbibliothek). Zeichensätze variieren von Plattform zu Plattform, daher gibt es keine Standardliste in Java.

Es gibt jedoch einige Bibliotheken von Drittanbietern, die diese Konstanten enthalten. Eine davon ist Guava (Google Core Libraries): http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Charsets.html

0 Stimmen

Ich habe eine Sekunde gebraucht, um das zu kapieren... Guava's Charsets Konstanten sind (keine Überraschung) Charsets, nicht Strings. InputStreamReader hat einen weiteren Konstruktor, der ein Charset und keinen String annimmt. Wenn Sie den String wirklich brauchen, ist es z.B. Charsets.UTF_8.name().

1 Stimmen

Zeichensätze können von Plattform zu Plattform variieren, aber UTF-8 ist garantiert vorhanden.

4 Stimmen

Alle Zeichensätze, die in StandardCharsets sind garantiert in jeder Java-Implementierung auf jeder Plattform vorhanden.

8voto

paulsm4 Punkte 106654

Sie können verwenden Charset.defaultCharset() API oder file.encoding Eigentum.

Aber wenn Sie Ihre eigene Konstante wollen, müssen Sie sie selbst definieren.

11 Stimmen

Der Standardzeichensatz wird in der Regel durch das Betriebssystem und die Gebietsschemaeinstellungen bestimmt. Ich glaube nicht, dass es eine Garantie dafür gibt, dass er bei mehreren Java-Aufrufen derselbe bleibt. Dies ist also kein Ersatz für ein konstantes, trennendes "utf-8".

8voto

Mostafa Vatanpour Punkte 1228

In Java 1.7+

Verwenden Sie keine "UTF-8"-Strings, sondern Charset Typ-Parameter:

import java.nio.charset.StandardCharsets

...

new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);

5voto

JJD Punkte 47071

Wenn Sie Folgendes verwenden OkHttp für Java/Android können Sie die folgende Konstante verwenden:

import com.squareup.okhttp.internal.Util;

Util.UTF_8; // Charset
Util.UTF_8.name(); // String

2 Stimmen

Es wird aus OkHttp entfernt, also ist der nächste Weg: Charset.forName("UTF-8").name() wenn Sie Unterstützung für ein niedrigeres Android als API 19+ benötigen, ansonsten können Sie es verwenden: StandardCharsets.UTF_8.name()

4voto

Vazgen Torosyan Punkte 1115

Konstante Definitionen für den Standard. Diese Zeichensätze sind garantiert auf jeder Implementierung der Java-Plattform verfügbar. Plattform verfügbar. seit 1.7

 package java.nio.charset;
 Charset utf8 = StandardCharsets.UTF_8;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X