日期:2014-05-18  浏览次数:20958 次

C#字符串(折磨我一天了)
string A = "\\u4e59\\u70ef";
如何利用A,使用一个方法,得到结果:
"\u4e59\u70ef".
(C#, VS2005)

------解决方案--------------------
string A = "\\u4e59\\u70ef";
如何利用A,使用一个方法,得到结果:
"\u4e59\u70ef".
(C#, VS2005)

首先感谢大家的回复.

其次谈谈的我看法:

Console.WriteLine(A); 结果是:\\u4e59\\u70ef
string B = "\u4e59\u70ef";
Console.WriteLine(B); 结果是:乙烯
大家可以自己测试一下.

A.Replace(@"\\",@"\") 这个方法是不行的.我想如果经过VS的测试,就知道结果是不行的.
还有Remove(),Replace(),SubString(),利用.NET提供的方法是不行的.小弟我招都想尽了,头都大了,要不怎么折磨我一天呢.

最后,提出我的方法,经过VS测试,是OK的:
string _t7 = "\\u4e59\\u70ef";
string _t8 = "\u4e59\u70ef";
string _t9 = "";

_t9 = _t7.Replace("\\u", "");

Console.WriteLine(_t9.Length);
string _t10 = CodingToCharacter(_t9);

Console.WriteLine(_t7);
Console.WriteLine(_t8);
Console.WriteLine(_t9);
Console.WriteLine(_t10);
Console.ReadLine();
以上代码是MAIN()函数里的.而CodingToCharacter()方法则定义如下:
public static string CodingToCharacter(string coding)
{
string characters = "";
if (coding.Length % 4 != 0)//编码为16进制,必须为4的倍数。
{
throw new System.Exception("编码格式不正确");
}
for (int i = 0; i < coding.Length; i += 4) //每四位为一个汉字
{
byte[] bytes = new byte[2];
string highCode = coding.Substring(i, 2); //取出低字节,并以16进制进制转换
string lowCode = coding.Substring(i + 2, 2); //取出高字节,并以16进制进行转换
bytes[1] = System.Convert.ToByte(highCode, 16);
bytes[0] = System.Convert.ToByte(lowCode, 16);
string character = System.Text.Encoding.Unicode.GetString(bytes);
characters += character;
}
return characters;
}
OK,成功.大家可以粘贴完了测试一下,谢谢
------解决方案--------------------
C# code

static void Main(string[] args)
{
    string A = "\\u4e59\\u70ef";
    Console.WriteLine(A);

    string B = A.Replace(@"\\", @"\");
    Console.WriteLine(B);

    string R =string.Empty;
    string[] splits = A.Split(new string[] { "\\u" }, StringSplitOptions.RemoveEmptyEntries);
    foreach (string var in splits)
    {
        if (var != "\\u")
        {
            R += char.ConvertFromUtf32(int.Parse(var, System.Globalization.NumberStyles.HexNumber));
        }
    }
    Console.WriteLine(R);
    Console.ReadLine();
}

------解决方案--------------------
string A = "\\u4e59\\u70ef";
-----------------------
这里字符串其实就是\u4e59\u70ef


Console.WriteLine(A); //输出:\u4e59\u70ef
string B = A.Replace(@"\\", @"\");
------------------------------------
这一句其实什么都没替换,因为A里根本没有\\


Console.WriteLine(B); //输出:\u4e59\u70ef 

你要把\u4e59\u70ef输出成“乙烯”,恐怕只靠转义是不行的,你看看Converter、Encoding下有什么方法,我觉得出路应该在这里,或者你把\u4e59\u70ef先转换成相应的byte数组,再进行其他转换。