怎样将Byte[]转换成字符串

海涵德 2012-06-04 09:13:58
有人给出的办法在silverlight中无效,还有什么办法?
...全文
620 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yn_jiang 2014-07-24
  • 打赏
  • 举报
回复
海涵德 2012-06-21
  • 打赏
  • 举报
回复
至今还没有解决。
火雲邪神 2012-06-15
  • 打赏
  • 举报
回复
.tostring()
E次奥 2012-06-15
  • 打赏
  • 举报
回复
我不信文件流都解决不了你的问题!
海涵德 2012-06-15
  • 打赏
  • 举报
回复
确实没有人给出解决办法,多是纸上谈兵或者用WinForm中的代码蒙事,在silverlight里确实还没有解决办法,我不需要想法,我只要代码,要用代码说话。
海涵德 2012-06-13
  • 打赏
  • 举报
回复
楼上的代码在silverlight中调试过吗?
这种方法我已经试用过了,结果是一样的。
我调试的代码如下:

FileStream fs = fileinfo.OpenRead();

// StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("utf-8"), true);

string s="";
byte[] bytes = new byte[fs.Length];

fs.Read(bytes, 0, bytes.Length);
s = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
fs.Close();


//Encoding fileEncoding = TxtFileEncoding.GetEncoding(fs, Encoding.GetEncoding("utf-8"));//取得这txt文件的编码


//Console.WriteLine("这个文本文件的编码为:" + fileEncoding.EncodingName);


// fs.Read(line, 0, line.Length);


// s = Encoding.GetEncoding("system").GetString(line, 0, line.Length);//gb2312
// s = Encoding.UTF8.GetString(line, 0, line.Length);
// s = Encoding.Unicode.GetString(line, 0, line.Length);

注释中是调试过的方法,都没有解决问题。
Fan_zhigao 2012-06-13
  • 打赏
  • 举报
回复
{
string fileContents = string.Empty;
//读取文件字节流(不能用OpenText,否则默认以UTF-8方式读取)
using(FileStream textStream = ofdUpFile.File.OpenRead())
{
//创建字节流数组
byte[] bytes = new byte[textStream.Length];
//读取相关数据
textStream.Read(bytes, 0, Convert.ToInt32(textStream.Length));
fileContents = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
海涵德 2012-06-06
  • 打赏
  • 举报
回复

private void do_file_readtext(string file_name)
{
string line;
byte[] bytes;
FileInfo fi = new FileInfo(file_name);

bytes = new byte[fi.Length];

Stream s = fi.OpenRead();

s.Read(bytes ,0,(int )fi.Length );

string line1 = System.Text.Encoding.GetEncoding(936).GetString(bytes);
s.Seek( 0, SeekOrigin.Begin);
string line2 = System.Text.Encoding.GetEncoding("gb2312").GetString(bytes);
s.Seek(0, SeekOrigin.Begin);
string line3 = System.Text.Encoding.Default.GetString(bytes);
//line = System.Text.Encoding.Unicode.GetString(bytes);
s.Close();

StreamReader sr = fi.OpenText();
line = sr.ReadLine();


sr.Close();

}

上面这段代码在Winform下调是都没有问题,只是下面这一段的OpenText()是非要用utf8编码读取文件得到的
line就乱码。
StreamReader sr = fi.OpenText();
line = sr.ReadLine();

sr.Close();

能否改变OpenText()的编码?,只要改成default就可以。
海涵德 2012-06-06
  • 打赏
  • 举报
回复
我发现utf8转换字符串是把汉字都转换成了65535,感觉他识别不了就用16位最大整数代替了。
海涵德 2012-06-06
  • 打赏
  • 举报
回复
我不是自己Encoding,而是读取一个其他文件中的汉字,经过Encoding.utf8后发现汉字转换为字节时的值都是65535,所以
代码这样写的:
streamread s=fi.opentext();
string line0=s.readline();
//
// 此时 line0 读过来,已经乱码,所以我想这么做
//
byte[] bs=system.text.encoding("utf-8").getbytes(line0);
// bs中的汉字值都为最大整数65535
string line1=system.text.encoding("utf-8").getstring(bs);

如果这样写代码:
stream s=fi.openread();
byte[] bs=new byte[fi.length];
s.read(bs,0,fi.length);
//
// 此时可以看到bs中汉字编码值还是正确的,每两个字节都是大于128小于65535的值,应该是原编码
//
string line1=system.text.encoding("utf-8").getstring(bs);
line1 是乱码的。
我发现utf8转换字符串是把汉字都转换成了65535,感觉他是别不了就用16位整数代替了。

以上为了简介忽略了大小写,估计诸位能够看明白。

  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

Encoding.Default
Encoding.ASCII
等在silverlight中都不存在,只有
Encoding.UTF8
Encoding.Unicode
[/Quote]

至少后两种对于我来说够用了。

如果你需要编码,可以自己写。找个关于编码的文档,看看各种编码byte[]对char的转换规则是什么,处理起来还是不难。
幸福小6 2012-06-05
  • 打赏
  • 举报
回复
有试过Encoding.Default.GetString( byte[] byte )吗?
海涵德 2012-06-05
  • 打赏
  • 举报
回复
Encoding.Default
Encoding.ASCII
等在silverlight中都不存在,只有
Encoding.UTF8
Encoding.Unicode
海涵德 2012-06-05
  • 打赏
  • 举报
回复
在早期的代码可以直接使用ascii转换双字节汉字编码,有了unicode后反倒更纠结。
海涵德 2012-06-05
  • 打赏
  • 举报
回复
没用。
jv9 2012-06-05
  • 打赏
  • 举报
回复
你试过强制类型转换了么?应该可以强制转换成String类型。

8,756

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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