1. ホーム

[解決済み】文字セット名が定数でないのはなぜ?

2022-04-09 18:08:36

質問

文字コードの問題はそれだけで混乱し、複雑ですが、その上、文字コードの正確な名前を覚えておかなければなりません。それは "utf8" ? それとも "utf-8" ? または多分 "UTF-8" ? インターネットでコードサンプルを検索すると、上記のようなものを見かけます。なぜ、名前付き定数にして Charset.UTF8 ?

解決方法は?

質問に対する簡単な答えは、利用可能な文字セット文字列がプラットフォームによって異なるということです。

ただし、必ず存在しなければならないものが6つあるので、そのための定数はとっくの昔に作れているはずです。なぜ作らなかったのかはわからない。

JDK1.4はCharset型を導入して、素晴らしいことをしました。この時点では、誰もがCharsetインスタンスを使えるようにすることが目標なので、String定数はもう提供したくなかったのでしょう。では、なぜ6つの標準的なCharset定数を提供しないのだろうか? たまたま隣に座っていたMartin Buchholzに尋ねたところ、当時はまだ物事が中途半端で、Charsetを受け入れるように改修されたJDK APIがあまりにも少なく、改修されたもののCharsetオーバーロードは通常わずかに性能が悪かったということを除いて、特に大きな理由はなかったと言いました。

JDK 1.6でようやくすべてのCharsetオーバーロードを装備し終えたというのは、とても悲しいことです。 そして、この後進的なパフォーマンスの状況がまだ存在することも(その理由は信じられないほど奇妙で、説明できませんが、セキュリティに関連しているのです!)。

長い話ですが -- 自分で定数を定義するか、PonyがリンクしたGuavaのCharsetsクラスを使ってください(ただし、このライブラリはまだ実際にリリースされていません)。

更新しました。 a StandardCharsets クラスはJDK 7に収録されています。