質問: ”\u{1F441}” また、print(results[recordNum].emoji)で中身を表示されると、「\u{1F441}」という文字列が表示されます。 絵文字を正常に表示するにはどうすべきかご教示ください。 よろしくお願いします。 ※絵文字情報は以下のページを参考にしています。 Full Emoji Data
回答: 絵文字ではなく、`"\u{1F441}"`といったテキストがそのまま入ってしまっています。Realmに値を保存するとき、特にモデルのプロパティにはどのように値を代入していますか? 推測ですが、ファイルなどに`"\u{1F441}"`といった文字列がそのまま書かれているのではないでしょうか? Swiftにおける`"\u{1F441}"`という表現はStringリテラルの特別な形なので、リテラルでなければただの文字列として扱われてしまいます。 例えば、下記のように直接絵文字を代入するか、Stringリテラルとして`"\u{1F441}"`を代入すれば、絵文字として保存され、取り出すことができます。 ``` let text1 = Text() text1.emoji = "👁" let text2 = Text() text2.emoji = "\u{1F441}" try! realm.write { realm.add(text1) realm.add(text2) } ``` まず、絵文字の入力元がどうなっているかを教えてください。ファイルなどにコードポイントの数値がテキストで書かれている、というならその数値を適切に変換する必要があります。 `"\u{1F441}"`という表記はStringリテラルの特別な形なので、「リテラル(ソースコード中に数値や文字列を直接に記述した定数)」として書かれない限りはただの文字列です。 解決方法はいろいろありますが、簡単なのはCSVでは絵文字を直接使うことです。 どうしてもコードポイントの数値でCSVには書いておきたいということであれば、 `\u{1F441}, \u{1F442}, ...`という形ではなくて、`1F441, 1F442, ...`と数値のみをCSVに書く形にして、 ``` let codePoint = Int(results[recordNum].emoji, radix: 16)! let scalar = UnicodeScalar(codePoint) let emoji = String(scalar) ``` 上記のようにコードポイントから文字列に変換すると良いと思います。