UTF-8符号化のスペース(194 160)問題

3247 ワード

フロントの文字列はバックグラウンドに渡されて処理され、文字列の1つのスペース(ASCII:32)がUTF-8で符号化された後、奇妙な文字になった(ASCII:1994と160の組み合わせ)!しかし、バックグラウンドではその表象はスペースです.
UTF-8符号化には「0 xC 20 xA 0」という特殊な文字が存在し、文字に変換する際には半角スペースとして表現され、一般的な半角スペース(ASCII 0 x 20)とは異なり幅が圧縮されないため、レイアウトでよく用いられる.しかし、GB 2312やUnicodeなどにはこのような文字はないので、変換するとフロントに「?」と表示されます.番号は、本物の疑問符ではなく疑問符として表示されるだけなので、置き換えられません!
同じように見える2つの文字列を変換すると、元の文字列が「#'%$()-」であることが確認されます.{}.b「エスケープされた文字列は:」#'%$()-{}.b"【注:二重引用符は計算されず、byte配列に変換すると、元は16バイトで、その後のそれは17バイトである:これが32-->194 160の結果である】
            string tmp1 = "#'  %$ ()_ -{}.b";
            string tmp2 = "#'  %$ ()_ -{}.b";
            byte[] o1 = Encoding.UTF8.GetBytes(tmp1);
            byte[] o2 = Encoding.UTF8.GetBytes(tmp2);

この原因が分かったら、やりやすくなり、コードを書くことで194と160の組み合わせを変換することができます.プログラム(C#)は次のようになります.
        private string ChangeUTF8Space(string targetStr)
        {
            try
            {
                string currentStr = string.Empty;
                byte[] utf8Space = new byte[] { 0xc2, 0xa0 };
                string tempSpace = Encoding.GetEncoding("UTF-8").GetString(utf8Space);
                currentStr = targetStr.Replace(tempSpace, " ");
                return currentStr;
            }
            catch (Exception ex)
            {
                return targetStr;
            }
        }

より多くの符号化フォーマット対照表はこの文章を見ることができます:http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=dec