19

Androidの新しいSDKバージョンをターゲットにしたため、次のコード行で警告が表示されます。

return getString(R.string.usertab1).toUpperCase()

カーソルを合わせると、次のように表示されます。

デフォルトのロケールを暗黙的に使用することは、バグの一般的な原因ですtoUpperCase(Locale)。代わりに使用してください。

誰かがこのエラーを取り除く方法を知っていますか?そして、なぜ今この方法を使用するのに好ましい方法なのですか?

私はこれが答えです、使用するtoUpperCase(Locale)が、それを実装するのに問題があります。Localeオブジェクトはどこから来たのですか?

4

1 に答える 1

32

デフォルトのロケールを明示的に使用できます。

return getString(R.string.usertab1).toUpperCase(Locale.getDefault());

基本的に、デバイスがデフォルトを使用することを暗黙的に許可することは望ましくありません。これは、問題になる可能性があるという事実を単に無視したことを意味する可能性があるためです。機械可読コンテンツの場合、特定のロケール(などLocale.ENGLISH)を指定して、データから必要な再利用性を常に取得できるようにすることができます。ユーザーを表示するには、デフォルトのロケールを明示的に指定するのが適切です。

より完全な読み物については:

よくある間違いは、機械可読であることが意図された出力を生成するときに、デフォルトのロケールを暗黙的に使用することです。これは、開発者のテストデバイスで機能する傾向がありますが(特に、非常に多くの開発者がen_USを使用しているため)、ユーザーがより複雑なロケールにあるデバイスで実行すると失敗します。

たとえば、整数をフォーマットしている場合、一部のロケールでは非ASCIIの10進数が使用されます。別の例として、浮動小数点数をフォーマットしている場合、一部のロケールは','小数点および'.'数字のグループ化に使用します。これは人間が読める形式の出力には正しいですが、別のコンピューターに提示された場合に問題が発生する可能性があります(parseDouble(String)たとえば、そのような数値を解析できません)。また、ロケールを使用しないオーバーロードにも注意する必要があります。たとえば、トルコでは、文字toLowerCase()とはとに変換されません。これはトルコ語のテキスト(ユーザー入力など)の正しい動作ですが、たとえばHTTPヘッダーには不適切です。toUpperCase()'i''I''I''i'

--Locale開発者向けドキュメント

于 2012-11-23T21:13:29.913 に答える