2017-06-23 9 views
1

私はWPFのチャットアプリケーションに取り組んでおり、その中に絵文字を使いたいと思っています。私はWPFアプリケーションに取り組んでいます。 Android/iOSデバイスから来ている絵文字を読んで、それぞれのイメージを表示したいのですが。エモーティコンをUTF-32 /エスケープされたユニコードに変換するには?

WPFでは、thisのような黒い絵文字が表示されています。私は何とかそれぞれの16進数/エスケープされたユニコード値で保存されている絵文字アイコンのライブラリを手に入れました。 私はこれらの絵文字のシンボルをUTF-32 /エスケープされたユニコードに変換して、関連する絵文字のアイコンを直接置き換えることができます。

私は、絵文字をそのユニコードに変換しようとしましたが、異なるユニコードを持つシンボルのカップルで別の文字列を得ることになりました。

 string unicodeString = "\u1F642"; // represents 

     Encoding unicode = Encoding.Unicode; 
     byte[] unicodeBytes = unicode.GetBytes(unicodeString); 

     char[] unicodeChars = new char[unicode.GetCharCount(unicodeBytes, 0, unicodeBytes.Length)]; 
     unicode.GetChars(unicodeBytes, 0, unicodeBytes.Length, unicodeChars, 0); 
     string asciiString = new string(unicodeChars); 

ご了承ください。

+0

「Android/iOS端末から送信された絵文字」とはどういう意味ですか?私は間違いなくあなたがすでにユニコードでそれらを得るだろうと思っていました。 –

+0

Char.ConvertFromUtf32(0x1F642)は、あなたにUTF-16表現/適切なC#Unicode文字列を与えるでしょう – ckuri

+0

@RandRandom実際にはアプリケーションはクロスプラットフォームなので、WPFクライアントで検出したいAndroidやiOSデバイスからの絵文字を受信します。 –

答えて

1

あなたのエスケープUnicode文字列はC#では無効です。

string unicodeString = "\u1F642"; // represents 

C位のみ(2バイトの)UTF-16を表す第4文字を尊重するので、コードのこの部分は、「少し笑顔」を表すdoesntの。

実際には1F64を表す文字とそれに続く簡単な2という文字があります。 http://www.fileformat.info/info/unicode/char/1f64/index.htm

ので、この:

var unicodeString = char.ConvertFromUtf32(0x1F642); 

https://msdn.microsoft.com/en-us/library/system.char.convertfromutf32(v=vs.110).aspx

またはあなたはそれを書くことができます:ὤ2

あなたは4バイトで進を入力し、使用する必要があり、対応する文字列を取得したい場合このように:

\uD83D\uDE42 
UTF-32は常に4であるので、(結果は、先行ゼロを持っている

var x = char.ConvertFromUtf32(0x1F642); 

var enc = new UTF32Encoding(true, false); 
var bytes = enc.GetBytes(x); 
var hex = new StringBuilder(); 
for (int i = 0; i < bytes.Length; i++) 
{ 
    hex.AppendFormat("{0:x2}", bytes[i]); 
} 
var o = hex.ToString(); 
//result is 0001F642 

この文字列は、より再び使い始めた進値である、あなたの希望する結果を得るために、このように解析することができますバイト)の代わりのようになりますよりもあなたもBitConverter.ToString(byte[])https://msdn.microsoft.com/en-us/library/3a733s97(v=vs.110).aspx結果を使用することができ、ループのための

:あなたは何を望むか

var x = char.ConvertFromUtf32(0x1F642); 

var enc = new UTF32Encoding(true, false); 
var bytes = enc.GetBytes(x); 
var o = BitConverter.ToString(bytes); 
//result is 00-01-F6-42 

ホープのthats。

関連する問題