none
請問如何在 TextBox 輸入 Unicode 後,輸出對應的符號? RRS feed

  • 問題

  • 請問如何在 TextBox 輸入 Unicode 後,輸出對應的符號?

    我試幾個方法都不行,如下:

            private void button1_Click(object sender, EventArgs e)
            {
                //// way 1
                //string s1 = textBox1.Text;
                //textBox2.Text = "\\u" + s1;

                //// way 2
                //char c = '\u005c';
                //string s1 = textBox1.Text;
                //textBox2.Text = c + "u" + s1;
            }

    請問要怎麼做才能查詢 Unicode 的符號?

    謝謝!!


    2013年12月7日 上午 04:08

解答

  • 說實話我原本也不熟Unicode,

    從Unicode的Wiki知道Unicode由兩個byte組成

    你題目要的應該是輸入4位字串,組合成這兩個byte然後輸出這個字元對吧?

    就拿wiki上中文的"葉"當例子,

    葉的Unicode是"8449"

    string text = "8449";
    byte[] bytes = new byte[2];
    bytes[1] = Convert.ToByte(text.Substring(0, 2), 16);
    bytes[0] = Convert.ToByte(text.Substring(2, 2), 16);
    string result = Encoding.Unicode.GetString(bytes);

    所做的就只是把前兩個字串16進位轉10進位存成byte,

    然後兩個byte再組成字元,比較奇怪的地方也只有byte順序是顛倒過來而已

    result就是結果的字串(8449就會是葉)

    踹過幾個其他的Unicode Table都沒問題,試試看吧

    • 已標示為解答 ryan2012.lin 2013年12月9日 上午 01:18
    2013年12月8日 下午 03:35

所有回覆

  • Encoding 類別

    NET Framework 中的字元編碼方式


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年12月7日 上午 04:25
    版主
  • 看看Encoding.Unicode.GetString是否合用?
    2013年12月7日 上午 05:43
  • 我根據MSDN的範例,修改成如下:

    // way 3
                string s = textBox1.Text;

                string unicodeString = @"\u" + s;

                Encoding ascii = Encoding.ASCII;
                Encoding unicode = Encoding.Unicode;

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

                byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);

                char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
                ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
                string asciiString = new string(asciiChars);


                textBox2.Text = asciiString;

    可是還是無法轉換成Unicode對應的符號?

    請問我該如何修改程式,才能做到呢?謝謝!!

    2013年12月7日 上午 09:02
  • 您是要顯示個別的byte的內容的話, 不要轉成字串, 直接將byte顯示出來即可, 例如:How to display byte array hex values?

    2013年12月8日 上午 02:53
  • "顯示個別的byte的內容的話, 不要轉成字串, 直接將byte顯示出來即可"?

    我現在卡在'\u'這個地方..

    sorry,我不太了解您所說的意思?是否可以寫個 sample code 讓我學習呢?

    我另外又寫了一個方式,但還是不行,如下:

                // way 4
                String unicodeString = @"\u";
                Encoding unicode = Encoding.Unicode;
                byte[] unicodeBytes = unicode.GetBytes(unicodeString);

                Encoding unicode1 = Encoding.Unicode;
                string str = unicode1.GetString(unicodeBytes);

    以上,我寫的方式,不管是那一種,string的變數值都會變成 '\\u' (多一個反斜線,why?)

    是不是我的觀念不正確?是否可以指導一下呢?謝謝!!


    2013年12月8日 上午 08:54
  • 說實話我原本也不熟Unicode,

    從Unicode的Wiki知道Unicode由兩個byte組成

    你題目要的應該是輸入4位字串,組合成這兩個byte然後輸出這個字元對吧?

    就拿wiki上中文的"葉"當例子,

    葉的Unicode是"8449"

    string text = "8449";
    byte[] bytes = new byte[2];
    bytes[1] = Convert.ToByte(text.Substring(0, 2), 16);
    bytes[0] = Convert.ToByte(text.Substring(2, 2), 16);
    string result = Encoding.Unicode.GetString(bytes);

    所做的就只是把前兩個字串16進位轉10進位存成byte,

    然後兩個byte再組成字元,比較奇怪的地方也只有byte順序是顛倒過來而已

    result就是結果的字串(8449就會是葉)

    踹過幾個其他的Unicode Table都沒問題,試試看吧

    • 已標示為解答 ryan2012.lin 2013年12月9日 上午 01:18
    2013年12月8日 下午 03:35
  • 先回答結果...成功!而且正是我想問的解答..^^

    您的解講很詳細,我也明白byte跟unicode的用法了.

    至於byte跟unicode順序顛倒的問題,我也不太清楚,不過我在網路上有查到資料.

    Unicode和漢字編碼小知識

    將漢字進行UNICODE編碼,如:"王"編碼後就成了"\u738b",UNICODE字符以\u開始,後面有4個數字或者字母,所有字符都是16進制的數字,每兩位表示的256以內的一個數字。而一個漢字是由兩個字符組成,於是就很容易理解了,"738b"是兩個字符,分別是"73""8b"。但是在將 UNICODE字符編碼的內容轉換為漢字的時候,字符是從後面向前處理的,所以,需要把字符按照順序"8b""73"進行組合得到漢字。

    P.S. 如果身懷絕學的其他前輩,也能像您這麼熱心的話,那對資訊業定能有所助益的...謝謝!!

    2013年12月9日 上午 02:01
  • 這個 ps 很離譜。

    希望你現在就能開始對資訊業有所助益,不要多,五年就可以了。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2013年12月9日 下午 12:39
  • 一天時間也不要多, 花六個小時在論壇幫別人解決問題就好, 歡迎加入 MSDN 論壇.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年12月9日 下午 02:14
    版主
  • 這個 ps 很離譜。

    希望你現在就能開始對資訊業有所助益,不要多,五年就可以了。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    您好,

    我剛學C#不久,也許描述問題不太清楚,但我已將我的程式都PO出來了,相信會的前輩應該看得懂我的問題在問什麼..

    如果我的能力可以幫得上真心想學習的人,我也很樂意分享!!

    人生不過短短幾十年,有時真的沒必要計較那麼多..(個人小小感言)

    2013年12月10日 下午 02:09
  • 一天時間也不要多, 花六個小時在論壇幫別人解決問題就好, 歡迎加入 MSDN 論壇.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    版主,您好,

    我剛學C#不久,可能談不上幫別人解決問題,但如果我能幫得上忙,我也會很樂意參與...XD

    2013年12月10日 下午 02:11
  • 說得很好,只不過那個 ps 在說別人,不是說自己。

    所有領域都是一樣,不單獨是資訊界。

    比如說熱心公益也能改善社會風氣,意思是一樣的,這個不需要資訊程度。

    人生不過短短幾十年,每天六小時的話還剩多少?連續五年還有多少?自己做到後再說你的感言,不是想別人去做到當成你的感言。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2013年12月10日 下午 04:17
  • 說得很好,只不過那個 ps 在說別人,不是說自己。

    所有領域都是一樣,不單獨是資訊界。

    比如說熱心公益也能改善社會風氣,意思是一樣的,這個不需要資訊程度。

    人生不過短短幾十年,每天六小時的話還剩多少?連續五年還有多少?自己做到後再說你的感言,不是想別人去做到當成你的感言。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    您說的是,熱心出自於善意,不一定要求貢獻多少.

    我不是要求別人做到,只是對自己的期許希望能夠做到.

    謝謝您的指教..^^"

    2013年12月10日 下午 10:55
  • P.S. 如果身懷絕學的其他前輩,也能像您這麼熱心的話,那對資訊業定能有所助益的...謝謝!!


    對自己的期許是這樣寫嗎?自己叫做其他前輩?那你應該先把自然語言練好再來練程式語言。不然你想要問東,可是寫出來的卻是問西。

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2013年12月11日 下午 01:00
  • P.S. 如果身懷絕學的其他前輩,也能像您這麼熱心的話,那對資訊業定能有所助益的...謝謝!!


    對自己的期許是這樣寫嗎?自己叫做其他前輩?那你應該先把自然語言練好再來練程式語言。不然你想要問東,可是寫出來的卻是問西。

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    謝謝您的提醒,那就各自加油吧!!

    話說到這已經離題了,所以這話題就不用再討論下去了..XD

    2013年12月12日 上午 12:53
  • 打了其他人一巴掌, 然後又硬凹成勉勵自己. 了不起.
    2013年12月17日 上午 09:28