65.9K
CodeProject 正在变化。 阅读更多。
Home

处理 UTF8 字符...

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.62/5 (8投票s)

2008 年 3 月 11 日

CPOL
viewsIcon

25381

现在处理 UTF8 字符已经不再困难了...

引言

有时的情况是,我们需要解析包含 Unicode 和 ASCII 字符的单个字符串,这时 .NET 中的 Encoding 函数可能无法提供帮助。
因此,我为这种情况创建了两个有用的函数...

背景

这篇文章需要一些关于处理 UTF8 字符的思考。开个玩笑..

你需要了解 .NET 中的字符串格式,以及如何将一个字符识别为 16 位(2 字节)的 Unicode。

使用代码

这两个函数将解决我们将 UTF 字符转换为字节以及将字节转换为 UTF 字符的问题。
            
public static string GetUTF8StringFrombytes(byte[] byteVal)

        {            

            byte[] btOne = new byte[1];

            StringBuilder sb = new StringBuilder("");

            char uniChar;

            for (int i = 0; i < byteVal.Length; i++)

            {

                btOne[0] = byteVal[i];

                if (btOne[0] > 127)

                {

                    uniChar = Convert.ToChar(btOne[0]);

                    sb.Append(uniChar);

                }

                else

                    sb.Append(Encoding.UTF8.GetString(btOne));

            }

            return sb.ToString();

        }



        public static byte[] GetBytesFromUTF8Chars(string strVal)

        {

            if (strVal != string.Empty || strVal != null)

            {

                byte btChar;

                byte[] btArr = new byte[strVal.Length * 2];

                byte[] tempArr;

                int arrIndex = 0;

                for (int i = 0; i < strVal.Length; i++)

                {

                    btChar = (byte)strVal[i];

                    if (btChar > 127 && btChar < 256)

                    {

                        btArr[arrIndex] = btChar;

                        arrIndex++;

                    }

                    else

                    {

                        tempArr = Encoding.UTF8.GetBytes(strVal[i].ToString());

                        Array.Copy(tempArr, 0, btArr, arrIndex, tempArr.Length);

                        arrIndex += tempArr.Length;

                        tempArr = null;

                    }

                }

                byte[] retVal = new byte[arrIndex];

                Array.Copy(btArr, 0, retVal, 0, arrIndex);

                return retVal;

            }

            else

                return new byte[0];

        }

        


关注点

只是提供一些我在遇到问题时找到的解决方案,以便其他人不会遇到同样的问题。

历史

如果提出任何改进建议,都将受到欢迎。

© . All rights reserved.