web-dev-qa-db-ja.com

utf-16文字をAndroid文字列リソースに入れるにはどうすればよいですか?

アプリの文字列に絵文字を使用したい。もちろん、すべての文字列はstrings.xmlにあります。

問題は、すべての絵文字が16ビット対応であるとは限らないことです。一部の絵文字は「通常の」16ビット16進数として表すことができます:'\ u26FF'しかし、一部は32ビット16進数(UTF-16)であり、通常は次のように表されます:'\ x1F600' =。アプリ内のコードで問題なく処理できます。ただし、strings.xmlリソースファイルはUTF8でエンコードされており、16ビット以外のエスケープ文字を適切に処理しません。

'\ x1F600'-を使用してみましたが、'\ u26FF'で問題なく動作することがわかりました。しかし、「x」エスケープ文字をむさぼり食うことはないようです。正規表現表記も好きではありませんでした'\ x {1F600}'

そのため、文字列プレースホルダー'%1 $ s'を使用して、次のようなコードで絵文字を入力することになりました。

// greeting_3 is defined as: "hello there %1$s!"
String s = context.getString(R.string.greeting_3, "????");
// OR:
String s = context.getString(R.string.greeting_3, new String(Character.toChars(0x1F61C)));

これはあまり洗練された解決策ではありません... strings.xmlに32ビットUTF-8文字を入れる適切な方法はありますか?

16
Shoham

ただし、strings.xmlリソースファイルはUTF8です。

UTF-8でエンコードされている場合は、絵文字を直接配置できます。ただし、エディタまたは別のソフトウェアがそれらを破壊するリスクがあります。

それらをXMLに配置する場合は、XMLエンティティを使用してみることができます:😀、Androidがそれらをどの程度サポートしているかはわかりませんが。

サロゲートペアを使用することもできます。絵文字をUTF-16に変換し、標準の\uエスケープを使用します。たとえば、このページをチェックしてください。Javaで文字列litaralを作成する方法も説明しています。 http://www.fileformat.info/info/unicode/char/1F600/index.htm

???? →U + 1F600→"\uD83D\uDE00"

10
Karol S

絵文字をコピーして貼り付けるだけの最も簡単な方法は、Android Studio3.0以降から機能します

2
Jesus Almaral