[解決済み] デフォルトのエンコードに依存していることが判明
2022-02-09 18:57:03
質問
FindBugsから以下のバグを取得しました。
MyClass.print(String) でデフォルトエンコーディングへの依存を発見しました。String.getBytes()
メソッド
protected void print (String str) {
{
private OutputStream outStream = null;
.....
outStream.write(str.getBytes());
.......
}
どのようなエラーなのか、どのように解決すればいいのか、教えてください。
ありがとうございました。
解決方法は?
文字列をバイトとしてエンコードする方法はさまざまで、charsetがそのエンコードを決定します。 charset を指定しない場合、たとえば以下のようになります。
str.getBytes()
の場合、システムのデフォルトが使用されます。
FindBugsが警告しているのは、出力にどのようなエンコーディングを使用するかを考える必要があるからです。 ファイルに書き込む場合、そのファイルの読者は何を期待しているのでしょうか? ある方法で書いて別の方法で読むということがないように、ファイルのエンコーディングを明示的に指定できれば最も安全です。
明示的に文字セットを指定するには
str.getBytes(Charset.forName("UTF-8"))
といった具合です。 UTF-8は常にサポートされており、あらゆる文字をエンコードできるため、良い選択です。
例えば
.properties
ファイルは常にISO 8859-1 (すなわちLatin-1)です。 これは、どのエンコーディングを使用するかについて曖昧さがないように文書化されています。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン