Ich versuche in diesem Code eine Konstante anstelle eines String-Literal zu verwenden:
new InputStreamReader(new FileInputStream(file), "UTF-8")
"UTF-8"
erscheint ziemlich oft im Code und es wäre viel besser, static final
stattdessen auf eine Variable zu verweisen . Wissen Sie, wo ich eine solche Variable in JDK finden kann?
Übrigens, bei einem zweiten Gedanken sind solche Konstanten ein schlechtes Design: Öffentliche statische Literale ... sind keine Lösung für die Duplizierung von Daten
Files.newBufferedWriter(Path path, Charset cs)
NIO.Antworten:
In Java 1.7+ definiert java.nio.charset.StandardCharsets Konstanten für das
Charset
EinschließenUTF_8
.Für Android: minSdk 19
quelle
.toString()
wird funktionieren, aber die richtige Funktion ist.name()
. 99,9% toString ist nicht die Antwort..displayName()
funktioniert es auch, wenn es nicht wie vorgesehen für die Lokalisierung überschrieben wird.name()
. Sie können dasCharset
Objekt direkt an denInputStreamReader
Konstruktor übergeben.String
, vielleicht aus alten Gründen. In solchen Fällen behalte ich einCharset
Objekt in der Nähe, das normalerweise von abgeleitet istStandardCharsets
, und verwende esname()
bei Bedarf.Jetzt benutze ich
org.apache.commons.lang3.CharEncoding.UTF_8
Konstante von commons-lang .quelle
org.apache.commons.lang3.CharEncoding.UTF_8
. (Hinweis "lang3").Die Google Guava - Bibliothek (die ich sehr sowieso empfehlen würde, wenn Sie tun , sind Arbeit in Java) , die eine hat
Charsets
Klasse mit statischen Feldern wieCharsets.UTF_8
,Charsets.UTF_16
usw.Seit Java 7 sollten Sie
java.nio.charset.StandardCharsets
stattdessen nur für vergleichbare Konstanten verwenden.Beachten Sie, dass diese Konstanten keine Zeichenfolgen sind, sondern tatsächliche
Charset
Instanzen. Alle Standard-APIs, die einen Zeichensatznamen verwenden, haben auch eine Überladung, die einCharset
Objekt akzeptiert, das Sie stattdessen verwenden sollten.quelle
java.nio.charset.StandardCharsets
wenn möglich zu verwenden, was kein Code von Drittanbietern ist. Darüber hinaus werden die Definitionen der Guava-Zeichensätze nicht "ständig geändert", und AFAIK hat die Abwärtskompatibilität nie unterbrochen, sodass ich Ihre Kritik nicht für gerechtfertigt halte.Charsets
Klasse zu tun hatten . Wenn Sie sich über Guave beschweren möchten, ist das in Ordnung, aber dies ist nicht der richtige Ort für diese Beschwerden.Falls diese Seite in einer Websuche angezeigt wird, können Sie ab Java 1.7 jetzt java.nio.charset.StandardCharsets verwenden , um Zugriff auf konstante Definitionen von Standardzeichensätzen zu erhalten.
quelle
Files.readAllLines(Paths.get("path-to-some-file"), StandardCharsets.UTF_8);
Diese Konstante ist verfügbar (ua als:
UTF-16
,US-ASCII
, etc.) in der Klasseorg.apache.commons.codec.CharEncoding
als auch.quelle
Es gibt keine (zumindest in der Standard-Java-Bibliothek). Die Zeichensätze variieren von Plattform zu Plattform, daher gibt es in Java keine Standardliste.
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
quelle
StandardCharsets
sind garantiert in jeder Java-Implementierung auf jeder Plattform vorhanden.Sie können
Charset.defaultCharset()
API oderfile.encoding
Eigenschaft verwenden.Wenn Sie jedoch Ihre eigene Konstante möchten, müssen Sie diese selbst definieren.
quelle
In Java 1.7+
Verwenden Sie nicht die Zeichenfolge "UTF-8", sondern den
Charset
Typparameter:quelle
Wenn Sie OkHttp für Java / Android verwenden, können Sie die folgende Konstante verwenden:
quelle
Charset.forName("UTF-8").name()
Wenn Sie Unterstützung für niedrigeres Android als API 19+ benötigen, können Sie Folgendes verwenden:StandardCharsets.UTF_8.name()
Konstante Definitionen für den Standard. Diese Zeichensätze sind garantiert bei jeder Implementierung der Java-Plattform verfügbar. seit 1.7
quelle
Die Klasse
org.apache.commons.lang3.CharEncoding.UTF_8
ist nach Einführung von Java 7 veraltetjava.nio.charset.StandardCharsets
quelle