处理 UTF8 字符...






1.62/5 (8投票s)
现在处理 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]; }
关注点
只是提供一些我在遇到问题时找到的解决方案,以便其他人不会遇到同样的问题。
历史
如果提出任何改进建议,都将受到欢迎。