none
字串格式問題 RRS feed

  • 問題

  • Dear All:

    ³nÅé¼Ò²Õ¤¤ªº¤@¯ë©Ê¿ù»~¡G¼Ð·Ç GUI (¹Ï§Î¤Æ¥Î¤á¤¶­±)¡C


    這字串是我由別的網路設備取得的訊息字串,這是什麼格式?我該如何把它轉成人看的懂的訊息呢?

    1.我有試著改系統的unicode,但沒用

    2.也試著轉字串格式,如下所示,但還無法取得正確的字串

    byte
    [] utf8 = Encoding.UTF8.GetBytes(Response[2].ToString());
    byte
    [] ascii = Encoding.ASCII.GetBytes(Response[2].ToString());
    byte
    [] utf7 = Encoding.UTF7.GetBytes(Response[2].ToString());
    byte
    [] utf32 = Encoding.UTF32.GetBytes(Response[2].ToString());
    Console.WriteLine("UTF-7 Text : {0} 
    , Encoding.UTF7.GetString(utf7));
    Console.WriteLine("UTF-8 Text : {0}"
    , Encoding.UTF8.GetString(utf8));
    Console.WriteLine("UTF-32 Text : {0}"
    , Encoding.UTF32.GetString(utf32));
    Console.WriteLine("ASCII Text : {0}"
    , Encoding.ASCII.GetString(ascii));
    

    是我哪個地方做錯了呢?有勞各位先進位小弟解答。

    感謝萬分。

     

    2010年8月20日 上午 02:36

解答

  • 你用相同的編碼轉成byte array 再轉回來 應該會得到相同的顯示結果

        private void button1_Click(object sender, EventArgs e)
        {
          string str = "³nÅé¼Ò²Õ¤¤ªº¤@¯ë©Ê¿ù»~¡G¼Ð·Ç GUI (¹Ï§Î¤Æ¥Î¤á¤¶­±)¡C";
          Encoding Latin1 = Encoding.GetEncoding(28591);
          Encoding Big5 = Encoding.GetEncoding(950);
          MessageBox.Show(Big5.GetString(Latin1.GetBytes(str)));
        }
    
    


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    • 已標示為解答 余小章MVP 2010年8月20日 上午 08:13
    2010年8月20日 上午 07:02

所有回覆

  • 是什麼設備呢?該不會通訊內容都是不可見字元,只能每個byte轉成十六或十進位顯示呢...
    2010年8月20日 上午 02:45
  • 91兄

    應該是可見字元,因為上述字串是錯誤訊息,廠商有開放

    Server端的軟體看的訊息是正確的,只是我不知道server是怎麼丟,我收到的都是亂碼

     

    2010年8月20日 上午 03:08
  • (1) Joe Hung不是91.

    (2) 通常這種東西都要和廠商要格式才知道, 因為有可能是各種格式 (ex: Base64String), 狠一點他搞不好兩端有做Encrypt/Decrypt.

         硬要猜猜看就是先對某一個已知的資料, 拿其中一個字元來try and error. 不過也不一定有結果.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年8月20日 上午 03:19
    版主
  • 比爾叔:這下誤會大了
    我再跟廠商要要資料看看
    2010年8月20日 上午 03:37
  • 怎沒試試用Big5編碼輸出呢

    應該會得到

    軟體模組中的一般性錯誤:標準GUI(圖形化用戶介面)‧


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2010年8月20日 上午 04:12
  • 怎沒試試用Big5編碼呢

    應該會得到

    軟體模組中的一般性錯誤:  blah blah blah


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

     

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

     

    在標題或文章註明很急
    不會增加網友回覆速度

    怎弄搭~我剛也有試Big5還是失敗的阿,哪裡弄錯了嗎

    byte[] big5 =Encoding.GetEncoding("Big5").GetBytes("³nÅé¼Ò²Õ¤¤ªº¤@¯ë©Ê¿ù»~¡G¼Ð·Ç GUI (¹Ï§Î¤Æ¥Î¤á¤¶­±)¡C");

    Console.WriteLine(Encoding.GetEncoding("Big5").GetString(big5));

    2010年8月20日 上午 04:19
  • 你用相同的編碼轉成byte array 再轉回來 應該會得到相同的顯示結果

        private void button1_Click(object sender, EventArgs e)
        {
          string str = "³nÅé¼Ò²Õ¤¤ªº¤@¯ë©Ê¿ù»~¡G¼Ð·Ç GUI (¹Ï§Î¤Æ¥Î¤á¤¶­±)¡C";
          Encoding Latin1 = Encoding.GetEncoding(28591);
          Encoding Big5 = Encoding.GetEncoding(950);
          MessageBox.Show(Big5.GetString(Latin1.GetBytes(str)));
        }
    
    


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    • 已標示為解答 余小章MVP 2010年8月20日 上午 08:13
    2010年8月20日 上午 07:02
  • 你收回來應該是Byte陣列吧 ? 為什麼又先轉成文字 ?

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

    搞定了,非常謝謝你

    再請問,為什麼codePage要用28591

    哪邊有資料嗎?


    2010年8月20日 上午 07:47
  • 找到了~是這個嗎??

     

    37: IBM EBCDIC (US-Canada), IBM037, IBM037
    437: OEM United States, IBM437, IBM437
    500: IBM EBCDIC (International), IBM500, IBM500
    708: Arabic (ASMO 708), ASMO-708, ASMO-708
    720: Arabic (DOS), DOS-720, DOS-720
    737: Greek (DOS), ibm737, ibm737
    775: Baltic (DOS), ibm775, ibm775
    850: Western European (DOS), ibm850, ibm850
    852: Central European (DOS), ibm852, ibm852
    855: OEM Cyrillic, IBM855, IBM855
    857: Turkish (DOS), ibm857, ibm857
    860: Portuguese (DOS), IBM860, IBM860
    861: Icelandic (DOS), ibm861, ibm861
    862: Hebrew (DOS), DOS-862, DOS-862
    863: French Canadian (DOS), IBM863, IBM863
    864: Arabic (864), IBM864, IBM864
    865: Nordic (DOS), IBM865, IBM865
    866: Cyrillic (DOS), cp866, cp866
    869: Greek, Modern (DOS), ibm869, ibm869
    874: Thai (Windows), windows-874, windows-874
    875: IBM EBCDIC (Greek Modern), cp875, cp875
    932: Japanese (Shift-JIS), iso-2022-jp, iso-2022-jp
    936: Chinese Simplified (GB2312), gb2312, gb2312
    949: Korean, ks_c_5601-1987, ks_c_5601-1987
    950: Chinese Traditional (Big5), big5, big5
    1026: IBM EBCDIC (Turkish Latin-5), IBM1026, IBM1026
    1200: Unicode, utf-16, utf-16
    1201: Unicode (Big-Endian), unicodeFFFE, unicodeFFFE
    1250: Central European (Windows), iso-8859-2, windows-1250
    1251: Cyrillic (Windows), koi8-r, windows-1251
    1252: Western European (Windows), iso-8859-1, Windows-1252
    1253: Greek (Windows), iso-8859-7, windows-1253
    1254: Turkish (Windows), iso-8859-9, windows-1254
    1255: Hebrew (Windows), windows-1255, windows-1255
    1256: Arabic (Windows), windows-1256, windows-1256
    1257: Baltic (Windows), windows-1257, windows-1257
    1258: Vietnamese (Windows), windows-1258, windows-1258
    1361: Korean (Johab), Johab, Johab
    10000: Western European (Mac), macintosh, macintosh
    10001: Japanese (Mac), x-mac-japanese, x-mac-japanese
    10002: Chinese Traditional (Mac), x-mac-chinesetrad, x-mac-chinesetrad
    10003: Korean (Mac), x-mac-korean, x-mac-korean
    10004: Arabic (Mac), x-mac-arabic, x-mac-arabic
    10005: Hebrew (Mac), x-mac-hebrew, x-mac-hebrew
    10006: Greek (Mac), x-mac-greek, x-mac-greek
    10007: Cyrillic (Mac), x-mac-cyrillic, x-mac-cyrillic
    10008: Chinese Simplified (Mac), x-mac-chinesesimp, x-mac-chinesesimp
    10010: Romanian (Mac), x-mac-romanian, x-mac-romanian
    10017: Ukrainian (Mac), x-mac-ukrainian, x-mac-ukrainian
    10021: Thai (Mac), x-mac-thai, x-mac-thai
    10029: Central European (Mac), x-mac-ce, x-mac-ce
    10079: Icelandic (Mac), x-mac-icelandic, x-mac-icelandic
    10081: Turkish (Mac), x-mac-turkish, x-mac-turkish
    10082: Croatian (Mac), x-mac-croatian, x-mac-croatian
    20000: Chinese Traditional (CNS), x-Chinese-CNS, x-Chinese-CNS
    20127: US-ASCII, us-ascii, us-ascii
    20261: T.61, x-cp20261, x-cp20261
    20290: IBM EBCDIC (Japanese katakana), IBM290, IBM290
    20866: Cyrillic (KOI8-R), koi8-r, koi8-r
    20932: Japanese (JIS 0208-1990 and 0212-1990), EUC-JP, EUC-JP
    20936: Chinese Simplified (GB2312-80), x-cp20936, x-cp20936
    20949: Korean Wansung, x-cp20949, x-cp20949
    21027: Ext Alpha Lowercase, x-cp21027, x-cp21027
    21866: Cyrillic (KOI8-U), koi8-u, koi8-u
    28591: Western European (ISO), iso-8859-1, iso-8859-1
    28592: Central European (ISO), iso-8859-2, iso-8859-2
    28594: Baltic (ISO), iso-8859-4, iso-8859-4
    28595: Cyrillic (ISO), iso-8859-5, iso-8859-5
    28596: Arabic (ISO), iso-8859-6, iso-8859-6
    28597: Greek (ISO), iso-8859-7, iso-8859-7
    28598: Hebrew (ISO-Visual), iso-8859-8, iso-8859-8
    28599: Turkish (ISO), iso-8859-9, iso-8859-9
    28603: Estonian (ISO), iso-8859-13, iso-8859-13
    28605: Latin 9 (ISO), iso-8859-15, iso-8859-15
    38598: Hebrew (ISO-Logical), iso-8859-8-i, iso-8859-8-i
    50220: Japanese (JIS), iso-2022-jp, iso-2022-jp
    50221: Japanese (JIS-Allow 1 byte Kana), iso-2022-jp, iso-2022-jp
    50222: Japanese (JIS-Allow 1 byte Kana - SO/SI), iso-2022-jp, iso-2022-jp
    50225: Korean (ISO), iso-2022-kr, euc-kr
    50227: Chinese Simplified (ISO-2022), x-cp50227, x-cp50227
    51932: Japanese (EUC), euc-jp, euc-jp
    51936: Chinese Simplified (EUC), EUC-CN, EUC-CN
    51949: Korean (EUC), euc-kr, euc-kr
    52936: Chinese Simplified (HZ), hz-gb-2312, hz-gb-2312
    54936: Chinese Simplified (GB18030), GB18030, GB18030
    57002: ISCII Devanagari, x-iscii-de, x-iscii-de
    57003: ISCII Bengali, x-iscii-be, x-iscii-be
    57004: ISCII Tamil, x-iscii-ta, x-iscii-ta
    57005: ISCII Telugu, x-iscii-te, x-iscii-te
    57006: ISCII Assamese, x-iscii-as, x-iscii-as
    57007: ISCII Oriya, x-iscii-or, x-iscii-or
    57008: ISCII Kannada, x-iscii-ka, x-iscii-ka
    57009: ISCII Malayalam, x-iscii-ma, x-iscii-ma
    57010: ISCII Gujarati, x-iscii-gu, x-iscii-gu
    57011: ISCII Punjabi, x-iscii-pa, x-iscii-pa
    65000: Unicode (UTF-7), utf-7, utf-7
    65001: Unicode (UTF-8), utf-8, utf-8

    2010年8月20日 上午 08:08
  • 比爾叔

    收回來是字串

    收到的字就是

    ³nÅé¼Ò²Õ¤¤ªº¤@¯ë©Ê¿ù»~¡G¼Ð·Ç GUI (¹Ï§Î¤Æ¥Î¤á¤¶­±)¡C
    
    2010年8月20日 上午 08:13
  • yes, you got it



    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2010年8月20日 上午 08:35
  • 收回來的字串先以 bytes 收,並用 16 進位貼出 byte() 內容,才能試圖解碼。

    在 .Net 不能暫存非 Unicode 的字串,一進字串發生掉碼,就沒辦法轉換測試。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年8月20日 下午 02:41
  • Alex

    請問您是如何知道codepage是28591呢

    2010年8月20日 下午 03:13
  • 其實有點運氣成份
    我是從 ÅéÒÕëÊÏÎ 這幾個字元判斷應當是屬於Extended ASCII字集
    就挑了 ISO-8859-1  


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

     

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

     

    在標題或文章註明很急
    不會增加網友回覆速度
    2010年8月21日 上午 03:45
  • 這串討論讓我回想到由 MySQL 的 Latin 字串轉換成 SQL Server 的編碼問題 ...
    以下為簽名檔,請勿對號入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年8月22日 上午 11:08
    版主
  • 可以把所有都轉一次,看哪個看得懂...XD

        Sub Main()
            Dim str As New StringBuilder
            Dim input As String = "³nÅé¼Ò²Õ¤¤ªº¤@¯ë©Ê¿ù»~¡G¼Ð·Ç GUI (¹Ï§Î¤Æ¥Î¤á¤¶ ±)¡C"
            For Each ecInfo1 In Encoding.GetEncodings
                For Each ecInfo2 In Encoding.GetEncodings
                    str.AppendLine(ecInfo1.DisplayName & " => " & ecInfo2.DisplayName & ":")
                    str.AppendLine(Encoding.GetEncoding(ecInfo2.CodePage).GetString(Encoding.GetEncoding(ecInfo1.CodePage).GetBytes(input)))
                    str.AppendLine()
                Next
            Next
            My.Computer.FileSystem.WriteAllText("c:\test.txt", str.ToString, False)
        End Sub

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年8月23日 上午 04:32