200分求一简单问题

littlelam 2008-05-02 04:21:21

/// <summary>
/// 将字符串转换成16进制编码的字符串
/// </summary>
/// <param name="Str"></param>
/// <returns></returns>
protected string StrToWMLStr(string Str)
{
string ReturnStr = "";
char[] b1 = Str.ToCharArray();

foreach (char b in b1)
{
if (b >= 0x4e00 && b <= 0x9fa5)
ReturnStr += "&#x" + Convert.ToString(b, 16) + ";";
else if (b == '&')
ReturnStr += "&";
else
ReturnStr += b.ToString();
}
return ReturnStr;
}

StrToWMLStr是将字符串中的中文转换成16进制编码的字符串 只对中文转换
求这个函数逆函数 WMLStrToStr
如:WMLStrToStr(StrToWMLStr("ab中12国"))="ab中12国"
...全文
201 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyzsy2008 2008-05-02
  • 打赏
  • 举报
回复
littlelam 2008-05-02
  • 打赏
  • 举报
回复
好了,谢谢楼上的各位...
genlinux 2008-05-02
  • 打赏
  • 举报
回复
protected string WMLStrToStr(ref string Str)
{
int index = Str.IndexOf("&#x");
if (index >= 0 && (index + 8) <= Str.Length)
{
int tmpNum;
if (int.TryParse(Str.Substring(index+3, 4), System.Globalization.NumberStyles.AllowHexSpecifier, NumberFormatInfo.CurrentInfo, out tmpNum))
{
if (tmpNum >= 0x4e00 && tmpNum <= 0x9fa5)
{
Str = Str.Remove(index, 8);
Str = Str.Insert(index, char.ConvertFromUtf32(tmpNum));
Str = WMLStrToStr(ref Str);
}
}

}
return Str;
}
-过客- 2008-05-02
  • 打赏
  • 举报
回复
汗,7楼已经回了。。。
cnzdgs 2008-05-02
  • 打赏
  • 举报
回复
按LZ的StrToWMLStr写个逆函数。
        protected string WMLStrToStr(string Str)
{
string ReturnStr = "";
for (int i=0; i<Str.Length; i++)
{
if (i<Str.Length -7)
{
string s = Str.Substring(i, 8);
char[] c = s.ToCharArray();

if (c[0] == '&' && c[1] == '#' && c[2] == 'x' && c[7] == ';')
{
char b = (char)Convert.ToUInt16(Str.Substring(i + 3, 4), 16);
ReturnStr += b.ToString();
i += 7;
continue;
}
}
ReturnStr += Str.Substring(i,1);
}
return ReturnStr;
}
-过客- 2008-05-02
  • 打赏
  • 举报
回复
try

        using System.Text.RegularExpressions;

private string WMLStrToStr(string srcStr)
{
return Regex.Replace(srcStr, @"&#x([0-9a-f]{4});", new MatchEvaluator(HexToChsDelegate), RegexOptions.IgnoreCase);
}

private string HexToChsDelegate(Match m)
{
byte[] array = new byte[2];
array[0] = (byte)Convert.ToInt32(m.Groups[1].Value.Substring(2), 16);
array[1] = (byte)Convert.ToInt32(m.Groups[1].Value.Substring(0, 2), 16);
return Encoding.Unicode.GetString(array);
}
wapit 2008-05-02
  • 打赏
  • 举报
回复
楼主, 你这步骤多余了. 其实完全没必要这么转的......

注意下代码页, 用utf-8编码(65001)保存, aspx页面也同样, 输出页面编码也用utf-8, 手机访问就没有问题了.
gomoku 2008-05-02
  • 打赏
  • 举报
回复
效率不是很高,不过比较简洁:


using System.Text.RegularExpressions;
//...

static string Replace(Match m)
{
try
{
string hex = m.Value.Substring(3, m.Value.Length - 4);
return ((char)Convert.ToInt32(hex, 16)).ToString();
}
catch
{
return m.Value;
}
}

static string WMLStrToStr(string escaped)
{
Regex regex = new Regex("\\&#[Xx][a-fA-F\\d]{1,4};");
return regex.Replace(escaped, new MatchEvaluator(Replace));
}
littlelam 2008-05-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 littlelam 的回复:]
"中国"可以用"中国"来表示
[/Quote]
这样就不受编码限制了,多用于wap站
littlelam 2008-05-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 whycom 的回复:]
为什么不用现成的
System.Text.Encoding.GetBytes
System.Text.Encoding.GetString
[/Quote]
如果你是做web开发就知道了
在网页中

"中国"可以用"中国"来表示
whycom 2008-05-02
  • 打赏
  • 举报
回复
为什么不用现成的
System.Text.Encoding.GetBytes
System.Text.Encoding.GetString
ai0ai 2008-05-02
  • 打赏
  • 举报
回复
怎么看着你那个例子里函数没什么作用呢?
hyblusea 2008-05-02
  • 打赏
  • 举报
回复
UP
littlelam 2008-05-02
  • 打赏
  • 举报
回复
原来这个区只能给200分...

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧