一个编解码问题

xiaoxin4321 2011-06-29 09:01:29
我有一个字符串变量
string 设备名称_CODE = "\u6D77\u66D9_ONU_726";

这样后,C#会自动给我解码为“海曙_ONU_726

但是,我从一个长串的字符中 解析出\u6D77\u66D9_ONU_726(比如在 aaaaa\u6D77\u66D9_ONU_726bbb中解析出刚才的字符串)并赋值给“设备名称_CODE"
得到的还是\u6D77\u66D9_ONU_726
...全文
410 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
老毕 2011-06-29
  • 打赏
  • 举报
回复
弄出来了!
test.txt
\u6D77\u66D9_ONU_726

代码模拟:
class MainClass
{
public static void Main(string[] args)
{
using (StreamReader sr = new StreamReader(@".\test.txt", UnicodeEncoding.Default))
{
string str = sr.ReadLine();
Console.WriteLine(str);

Regex reg = new Regex(@"(\\u[0-9a-fA-F]{4})");

string result = reg.Replace(str, new MatchEvaluator(new MainClass().Hex2Unicode));
Console.WriteLine(result);
}
}

public string Hex2Unicode(Match m)
{
return ((char)(int.Parse(m.Value.Substring(2),NumberStyles.HexNumber))).ToString();
}
}

结果:
\u6D77\u66D9_ONU_726
海曙_ONU_726
wang_jian_999 2011-06-29
  • 打赏
  • 举报
回复
加我QQ我可以給你個例子,290549236
老毕 2011-06-29
  • 打赏
  • 举报
回复
可以用这个正则指代\u6D77,我试试帮你写一段出来,先给你正则
Regex reg = new Regex(@"\u[0-9a-fA-F]{4})+");
老毕 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 xiaoxin4321 的回复:]

是啊。。文本里是这个
引用 18 楼 abbey 的回复:
我反应过来了,是不是你原文件里的串就是:\u6D77\u66D9_ONU_726?
[/Quote]

OMG,那就是了嘛。之前完全弄迷糊了。
你从文本文件里读进来,“\u6D77”是一个6字符的串
而用字符串赋值,“\u6D77”因为转义,就是一个字符

可以自己解析一下,写一段实现同样转义功能的代码段
xiaoxin4321 2011-06-29
  • 打赏
  • 举报
回复
直接用赋值给string的方式(string xxx = "\u6D77\u66D9_ONU_726")这样的话"\"现在是具有转义功能的,就会自动编码成中文吧,我从文本中读取后的,再在监视里看,就会发现'\'已经是单纯的字符了,不具转义功能[Quote=引用 16 楼 abbey 的回复:]
之前Stream加个UnicodeEncoding.Default参数,是为了保证Unicode编码的字符能被正确读入。你在15楼给的串,我复制了,调试器的观察窗口,看见的值是:"海曙_ONU_726"
难道是字符编码的问题?还是你其他什么小细节没注意?
[/Quote]
xiaoxin4321 2011-06-29
  • 打赏
  • 举报
回复
是啊。。文本里是这个
[Quote=引用 18 楼 abbey 的回复:]
我反应过来了,是不是你原文件里的串就是:\u6D77\u66D9_ONU_726?
[/Quote]
pm_854537719 2011-06-29
  • 打赏
  • 举报
回复
将\变成\\或者是在字符串前面加上@也行
老毕 2011-06-29
  • 打赏
  • 举报
回复
我反应过来了,是不是你原文件里的串就是:\u6D77\u66D9_ONU_726?
xiaoxin4321 2011-06-29
  • 打赏
  • 举报
回复
我发现监视里面变量的值总是\\u6D77\\u66D9_ONU_726,就是说那个\已经不具备转义的功能了。。。[Quote=引用 14 楼 abbey 的回复:]
能把文件样本截一段贴上来吗?
[/Quote]
老毕 2011-06-29
  • 打赏
  • 举报
回复
之前Stream加个UnicodeEncoding.Default参数,是为了保证Unicode编码的字符能被正确读入。你在15楼给的串,我复制了,调试器的观察窗口,看见的值是:"海曙_ONU_726"
难道是字符编码的问题?还是你其他什么小细节没注意?


xiaoxin4321 2011-06-29
  • 打赏
  • 举报
回复
s0.DEVNAME="\u6D77\u66D9_ONU_726";

这个我测试的
老毕 2011-06-29
  • 打赏
  • 举报
回复
能把文件样本截一段贴上来吗?
xiaoxin4321 2011-06-29
  • 打赏
  • 举报
回复
报告,测试不成功。。
[Quote=引用 12 楼 abbey 的回复:]
我知道原因了。之前我给某人回复过类似的问题的。

把StreamReader sw = new StreamReader(@"DDDD.txt");这行多加个参数再试试

C# code

StreamReader sw = new StreamReader(@"DDDD.txt", UnicodeEncoding.Default);
[/Quote]
老毕 2011-06-29
  • 打赏
  • 举报
回复
我知道原因了。之前我给某人回复过类似的问题的。

StreamReader sw = new StreamReader(@"DDDD.txt");这行多加个参数再试试
StreamReader sw = new StreamReader(@"DDDD.txt", UnicodeEncoding.Default);


xiaoxin4321 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 abbey 的回复:]
如果是象string str1= "\u6D77\u66D9_ONU_726"这样的串,C#里是会自动转义的,是不是其他什么问题?
[/Quote]是这样,你们帮我试试看把字符串放到一个文本里,再进行读取,就会发现不会转义了
 StreamReader sw = new StreamReader(@"DDDD.txt");
string html = sw.ReadToEnd();

老毕 2011-06-29
  • 打赏
  • 举报
回复
如果是象string str1= "\u6D77\u66D9_ONU_726"这样的串,C#里是会自动转义的,是不是其他什么问题?
xiaoxin4321 2011-06-29
  • 打赏
  • 举报
回复
我发现我是从网页中得到他的源代码,然后进行解析,我解析后得到了\u6D77\u66D9_ONU_726,是不是该"\"已经被转成了不具有转义功能的"\"了,所以才不能被解码了

[Quote=引用 8 楼 abbey 的回复:]
引用楼主 xiaoxin4321 的回复:
但是,我从一个长串的字符中 解析出\u6D77\u66D9_ONU_726(比如在 aaaaa\u6D77\u66D9_ONU_726bbb中解析出刚才的字符串)并赋值给“设备名称_CODE"
得到的还是\u6……

能说下你怎么解析的吗?可能是解析的方法不正确呢?
[/Quote]
老毕 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 xiaoxin4321 的回复:]
但是,我从一个长串的字符中 解析出\u6D77\u66D9_ONU_726(比如在 aaaaa\u6D77\u66D9_ONU_726bbb中解析出刚才的字符串)并赋值给“设备名称_CODE"
得到的还是\u6……
[/Quote]
能说下你怎么解析的吗?可能是解析的方法不正确呢?
老毕 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiaoxin4321 的回复:]

我比较迷惑了,是跟转义有关,就是不知道怎么解决它引用 4 楼 abbey 的回复:
关键在于:字符串转义。在Console.Write()会使用转义规则,你试试输出下面这2个串。

C# code

string str1 = "aaaaa\u6D77\u66D9_ONU_726bbb";
string str2 = @"aaaaa\u6D77\u66D9_ONU_726bbb";
……
[/Quote]
解决它? 什么意思?
PrinSun 2011-06-29
  • 打赏
  • 举报
回复
\u 就是一个转义,直接赋值给string的话,应该会自动转义的.就好比\r \n \t 类似.
加载更多回复(6)

110,502

社区成员

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

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

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