如何将字符串转换成转义字符串?

we2677507 2012-06-20 06:35:53
列入 GBK编码的字符串:"你好" 转成 "\xbc\xa0\x09\xa8"
...全文
731 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
we2677507 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

C# code

string s = @"\xb5\xe7\xd3\xb0\xc5\xc5\xd0\xd0_\xd7\xee\xd0\xc2\xc8\xcb\xc6\xf8\xd7\xee\xcd\xfa\xb5\xc4\xc8\xab\xb2\xbf\xca\xd3\xc6\xb5_\xcd\xc1\xb6\xb9\xcd\xf8";
……
[/Quote]
仔细看里面还有下滑线呢 ~ 0\xd0_\xd7\xee 不光有下滑线 ,还有其他很多非汉字字符~
  • 打赏
  • 举报
回复

string s = @"\xb5\xe7\xd3\xb0\xc5\xc5\xd0\xd0_\xd7\xee\xd0\xc2\xc8\xcb\xc6\xf8\xd7\xee\xcd\xfa\xb5\xc4\xc8\xab\xb2\xbf\xca\xd3\xc6\xb5_\xcd\xc1\xb6\xb9\xcd\xf8";
MatchCollection matches = Regex.Matches(s, @"(?i)\\x([0-9a-f]{2})");
byte[] bytes = new byte[matches.Count];
for (int i = 0; i < matches.Count; i++)
bytes[i] = byte.Parse(matches[i].Groups[1].Value, System.Globalization.NumberStyles.AllowHexSpecifier);
string r = Encoding.GetEncoding("gbk").GetString(bytes);
byte[] unicodeBytes = Encoding.Convert(Encoding.GetEncoding("gbk"), Encoding.Unicode, bytes);
string st = Encoding.Unicode.GetString(unicodeBytes);
StringBuilder sb = new StringBuilder();
foreach( char c in st)
{
if( c > 127 )
{
// This character is too big for ASCII
string encodedValue = "\\u" + ((int) c).ToString( "x4" );
sb.Append( encodedValue );
}
else
{
sb.Append( c );
}
}
string result = sb.ToString();
//result = "\u7535\u5f71\u6392\u884c\u6700\u65b0\u4eba\u6c14\u6700\u65fa\u7684\u5168\u90e8\u89c6\u9891\u571f\u8c46\u7f51";

测试通过
__天涯寻梦 2012-06-20
  • 打赏
  • 举报
回复
var s = @"\xb5\xe7\xd3\xb0\xc5\xc5\xd0\xd0\xd7\xee\xd0\xc2\xc8\xcb\xc6\xf8\xd7\xee\xcd\xfa\xb5\xc4\xc8\xab\xb2\xbf\xca\xd3\xc6\xb5\xcd\xc1\xb6\xb9\xcd\xf8";
var bytes = new byte[s.Length / 4];
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] = Convert.ToByte(s.Substring(i * 4 + 2, 2), 16);
}
var str = Encoding.GetEncoding("GBK").GetString(bytes);//电影排行最新人气最旺的全部视频土豆网
var nbytes = Encoding.UTF8.GetBytes(str);
var nstr = string.Concat(Array.ConvertAll(nbytes, v1 => @"\x" + Convert.ToString(v1, 16)));
// \xe7\x94\xb5\xe5\xbd\xb1\xe6\x8e\x92\xe8\xa1\x8c\xe6\x9c\x80\xe6\x96\xb0\xe4\xba\xba\xe6\xb0\x94\xe6\x9c\x80\xe6\x97\xba\xe7\x9a\x84\xe5\x85\xa8\xe9\x83\xa8\xe8\xa7\x86\xe9\xa2\x91\xe5\x9c\x9f\xe8\xb1\x86\xe7\xbd\x91
we2677507 2012-06-20
  • 打赏
  • 举报
回复
有没有朋友了解这快内容啊~
we2677507 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

C# code
string s = @"\xb5\xe7\xd3\xb0\xc5\xc5\xd0\xd0_\xd7\xee\xd0\xc2\xc8\xcb\xc6\xf8\xd7\xee\xcd\xfa\xb5\xc4\xc8\xab\xb2\xbf\xca\xd3\xc6\xb5_\xcd\xc1\xb6\xb9\xcd\xf8";
MatchCollect……
[/Quote]
亲 我想要的是把 string s = @"\xb5\xe7\xd3\xb0\xc5\xc5\xd0\xd0_\xd7\xee\xd0\xc2\xc8\xcb\xc6\xf8\xd7\xee\xcd\xfa\xb5\xc4\xc8\xab\xb2\xbf\xca\xd3\xc6\xb5_\xcd\xc1\xb6\xb9\xcd\xf8";
转换成Unicode编码的~ 如果上面的s字符串是GBK格式的话!
使用byte[] bt =Encoding.Convert(Encoding.GetEncoding('GBK'),Encoding.Unicode,Encoding.GetEncoding.GetEncoding('gbk').GetBytes(s))
得不到正确的结果~
dalmeeme 2012-06-20
  • 打赏
  • 举报
回复
		string s = @"\xb5\xe7\xd3\xb0\xc5\xc5\xd0\xd0_\xd7\xee\xd0\xc2\xc8\xcb\xc6\xf8\xd7\xee\xcd\xfa\xb5\xc4\xc8\xab\xb2\xbf\xca\xd3\xc6\xb5_\xcd\xc1\xb6\xb9\xcd\xf8";
MatchCollection matches = Regex.Matches(s, @"(?i)\\x([0-9a-f]{2})");
byte[] bytes = new byte[matches.Count];
for (int i = 0; i < matches.Count; i++)
bytes[i] = byte.Parse(matches[i].Groups[1].Value, NumberStyles.AllowHexSpecifier);
string r = Encoding.GetEncoding("gbk").GetString(bytes);
Response.Write(r);


输出:
电影排行最新人气最旺的全部视频土豆网
we2677507 2012-06-20
  • 打赏
  • 举报
回复
\u7535\u5f71\u6392\u884c --------- unicode编码 ! 用MessageBox显示 “电影排行”~
那么这段编码对应的GBK编码怎么显示的?
we2677507 2012-06-20
  • 打赏
  • 举报
回复
\xb5\xe7\xd3\xb0\xc5\xc5\xd0\xd0_\xd7\xee\xd0\xc2\xc8\xcb\xc6\xf8\xd7\xee\xcd\xfa\xb5\xc4\xc8\xab\xb2\xbf\xca\xd3\xc6\xb5_\xcd\xc1\xb6\xb9\xcd\xf8
这是用python 获取的一段网页源码 GBK格式的~ 用C# 如何把这段编码转成Unicode? 我用Enocding转换后都是乱码~ 转换不正确,所以我才怀疑C#下GBK编码的显示方式是不是用\Xb5的样子显示的!
dalmeeme 2012-06-20
  • 打赏
  • 举报
回复
\xeb好像用得比较多些。
we2677507 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

默认输出是用-分开的,如果你要\x这种也可以的,因为你在1楼说“上面的那种是我猜想的!”,所以我才给你那个代码的。

如果要\x这种,这样试试:
C# code
string s = "你好";
string r = BitConverter.ToString(Encoding.GetEncoding("GBK").GetBytes(s));
……
[/Quote]
GBK的转义型字符串是什么样的格式? 是"\xeb" 样子吗? 我知道Unicode是"\u2000"样子的!
dalmeeme 2012-06-20
  • 打赏
  • 举报
回复
默认输出是用-分开的,如果你要\x这种也可以的,因为你在1楼说“上面的那种是我猜想的!”,所以我才给你那个代码的。

如果要\x这种,这样试试:
		string s = "你好";
string r = BitConverter.ToString(Encoding.GetEncoding("GBK").GetBytes(s));
r = Regex.Replace(r, @"(?i)(^|-)", @"\x");
输出(r);
ParanoidKing 2012-06-20
  • 打赏
  • 举报
回复

string s = "你好";
byte[] bs = System.Text.Encoding.GetEncoding("GBK").GetBytes(s);
string s1 = string.Empty;
for(int i=0; i < bs.Length; i++)
{
s1 += @"\x" + bs[i].ToString("x2");
}
Console.WriteLine(s1);

不过结果好像不是\xbc\xa0\x09\xa8
we2677507 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

C# code
string s = "你好";
string r = BitConverter.ToString(Encoding.GetEncoding("GBK").GetBytes(s));
输出r
[/Quote]
输出是这个东西:“b5-e7-d3-b0-c5-c5-d0-d0_-d7-ee-d0-c2-c8-cb-c6-f8-d7-ee-cd-fa-b5-c4-c8-ab-b2-bf-ca-d3-c6-b5_-cd-c1-b6-b9-cd-f8”
很明显不对~
这个GBK编码如何转换成Unicode :“\xb5\xe7\xd3\xb0\xc5\xc5\xd0\xd0_\xd7\xee\xd0\xc2\xc8\xcb\xc6\xf8\xd7\xee\xcd\xfa\xb5\xc4\xc8\xab\xb2\xbf\xca\xd3\xc6\xb5_\xcd\xc1\xb6\xb9\xcd\xf8”
我转换不了 每次都错 ~ 所以我怀疑这段GBK编码在C#中不是这样表示的!
we2677507 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

C# code
string s = "你好";
string r = BitConverter.ToString(Encoding.GetEncoding("GBK").GetBytes(s));
输出r
[/Quote]
我去试试
dalmeeme 2012-06-20
  • 打赏
  • 举报
回复
		string s = "你好";
string r = BitConverter.ToString(Encoding.GetEncoding("GBK").GetBytes(s));
输出r
we2677507 2012-06-20
  • 打赏
  • 举报
回复
另外GBK在C#中转义序列的表示方式是什么~ 上面的那种是我猜想的!

111,125

社区成员

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

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

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