字符编码问题(高分求助)

yinjor 2009-12-18 10:55:04
1.每种字符集对应一种字符编码,还是一种字符对应多种编码(给个链接也行)

2.用C#怎么去识别这些编码转化成的二进制序列

3.字符集之间的转化的思路是什么,比如UTF-8 到 GB2312,或GB2312转化成UTF-8,另外编码不同会不会存在编码集合中的元素的个数不一样,主要是哪些不一样,给一个权威一点儿的网址,或有特色的代码

...全文
143 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinjor 2009-12-19
  • 打赏
  • 举报
回复
要是搜索引擎能解决问题,就没有必要在这里面来发贴了,C#的高手们,进来帮一下忙。
yinjor 2009-12-19
  • 打赏
  • 举报
回复
恩,现在终于明白一点是怎么回事了,多谢各位的支持。
xialei222 2009-12-19
  • 打赏
  • 举报
回复
System.Text.Encoding
wartim 2009-12-19
  • 打赏
  • 举报
回复
没有办法通过编码后的字节数组去反求出原先的编码格式,

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication238
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

Byte[] Bytes ={ 0x30, 0x80 };

foreach (EncodingInfo EI in Encoding.GetEncodings())
MessageBox.Show("CodePage: " + EI.CodePage + Environment.NewLine
+ "DisplayName: " + EI.DisplayName + Environment.NewLine
+ "String: " + EI.GetEncoding().GetString(Bytes));
}
}
}


可以看出同一种编码结果可以解释成任意编码的结果,是否合适,目测吧。。。
sxmonsy 2009-12-19
  • 打赏
  • 举报
回复

private void TestStringBytes() {  
string s = "C#语言";  
byte[] b1 = System.Text.Encoding.Default.GetBytes(s);  
byte[] b2 = System.Text.Encoding.Unicode.GetBytes(s);  
string t1 = "", t2 = "";  
foreach (byte b in b1) {  
t1 += b.ToString("") + " ";  
}  
foreach (byte b in b2) {  
t2 += b.ToString("") + " ";  
}  
this.textBox1.Text = "";  
this.textBox1.AppendText("b1.Length = " + b1.Length + "\n");  
this.textBox1.AppendText(t1 + "\n");  
this.textBox1.AppendText("b2.Length = " + b2.Length + "\n");  
this.textBox1.AppendText(t2 + "\n");  
} 

  运行结果如下,不说详述,相信已经明白了。

b1.Length = 6 
67 35 211 239 209 212  
b2.Length = 8 
67 0 35 0 237 139 0 138  


将C#字节数组转换成字符串,使用 Encoding 类的 string GetString(byte[]) 或 string GetString(byte[], int, int) 方法,具体使用何种 Encoding 还是由编码决定。在 TestStringBytes() 函数中添加如下语句作为实例:

byte[] bs = {97, 98, 99, 100, 101, 102};  
string ss = System.Text.Encoding.ASCII.GetString(bs);  
this.textBox1.AppendText("The string is: " + ss + "\n"); 

  运行结果为:The string is: abcdef

flyfly2008 2009-12-19
  • 打赏
  • 举报
回复
来学习,帮忙顶起
sxmonsy 2009-12-19
  • 打赏
  • 举报
回复
System.Text.Encoding类里bye[] GetBytes(string) 方法将字符串转换成字节数组,还提供了 string GetString(byte[]) 方法将C#字节数组转换成字符串。
会飞的老鱼 2009-12-19
  • 打赏
  • 举报
回复
学习
yinjor 2009-12-19
  • 打赏
  • 举报
回复
可能是我没有说清楚

比如,记事本保存了二个文件,一个是用ansi编码,一个是有Unicode编码,我在控制台中读取的时侯,我是适先知道了个是Ansi,另一个Unicode
所以,我在用StreamReader的打开的时侯,分别用了System.Encoding.Default,和System.Encodeing.Unicode
但,现在的问题
记事本在打开这两个文件的时侯,他不知道哪个是用的ansi,他只能用程序选识别编码是用的什么编码

还有就是,测试时用System.Encodeing.Unicode
UTF-8,UTF-16显示的结果都正常,有没有什么特殊的例子,能表面打开时显示不一样的情况
因为这种问题我是碰到过的,就是在做Sql查询的时侯,有些中文字符居然查不出来,我估计和编码有关系
wangxiao2008 2009-12-18
  • 打赏
  • 举报
回复
up
viena 2009-12-18
  • 打赏
  • 举报
回复
有种东西叫做搜索引擎~
viena 2009-12-18
  • 打赏
  • 举报
回复
//System.Text.Encoding
yinjor 2009-12-18
  • 打赏
  • 举报
回复
像偶这一样,一知半解的人,最好不要去搜,因为搜来也不对,更不要乱发言,浪费表情
yinjor 2009-12-18
  • 打赏
  • 举报
回复
各位大侠客
(1)ToCharArray()不行啊,是转化成Char型的,不是字节型

(2)我是想通过二进制序列求字符集名称,代码页
wangkuang5 2009-12-18
  • 打赏
  • 举报
回复

1.获得自定义的编码

EncodingInfo GETEncodingInfo(string encoding_name)
{
Dictionary<string, EncodingInfo> EncodingInfoDictionary = new Dictionary<string, EncodingInfo>();
EncodingInfo[] eis = Encoding.GetEncodings();
foreach (EncodingInfo ei in eis)
{
Trace.WriteLine(ei.Name + "," + ei.DisplayName + "," + ei.CodePage);
/*跳过一个重名
iso-2022-jp,日语(JIS),50220
csISO2022JP,日语(JIS-允许 1 字节假名),50221
iso-2022-jp,日语(JIS-允许 1 字节假名 - SO/SI),50222
*/
if (ei.CodePage == 50222) continue;
EncodingInfoDictionary.Add(ei.Name, ei);
}
return EncodingInfoDictionary[encoding_name];//如果编码名不在字典集合,会报异常,
}



private void button2_Click(object sender, EventArgs e)
{

MessageBox.Show(Encoding.GetEncoding(GETEncodingInfo("gb2312").CodePage).EncodingName);
}


2.3.
二进制序列 和 编码转换


string str_value = Encoding.Unicode.GetString(Encoding.Convert(Encoding.UTF8, Encoding.Unicode, Encoding.UTF8.GetBytes("你好")));

str_value .ToCharArray()

cszg_zjy 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 much0726 的回复:]
2.用C#怎么去识别这些编码转化成的二进制序列
直接使用函数就可以ToCharArray()

3.如果是C#,内置的System.Text.Encoding就可以实现转换了。
[/Quote]up~
dakuku 2009-12-18
  • 打赏
  • 举报
回复
学习了~~
much0726 2009-12-18
  • 打赏
  • 举报
回复
2.用C#怎么去识别这些编码转化成的二进制序列
直接使用函数就可以ToCharArray()

3.如果是C#,内置的System.Text.Encoding就可以实现转换了。

110,536

社区成员

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

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

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