using System;
using System.Text;
using System.IO;
namespace CharAndString
{
class Class1
{
static void Main(string[] args)
{
//字符串类 String 中的内容是 UNICODE 字符串:
string str = "中文123";
// 得到长度为 5,因为是 5 个字符
Console.WriteLine(str.Length);
//字符串和字节串相互转化
// 按照 GB2312 得到字节(得到多字节字符串)
Encoding gb=Encoding.GetEncoding("gb2312");
byte[] bytes = gb.GetBytes(str);
char[] chars = gb.GetChars(bytes);//从字节按照 GB2312 得到字符数组
str = gb.GetString(bytes);// 从字节按照 GB2312 得到 UNICODE 字符串
// 要将 String 按照某种编码写入文本文件,有两种方法:
// 第一种办法:用 Stream 类写入已经按照指定编码转化好的字节串
StreamWriter sw = new StreamWriter("1.txt");
sw.Write(chars);
sw.Close();
// 第二种办法:构造指定编码的 Writer 来写入字符串
StreamWriter sw2 = new StreamWriter("2.txt",false,gb);
sw2.Write(str);
sw2.Close();
/* 最后得到的 1.txt 和 2.txt 都是 7 个字节 */ }
}
}
using System;
using System.Text;
namespace WrongCode
{
class Class1
{
static void Main(string[] args)
{
//字符串类 String 中的内容是 UNICODE 字符串:
string str = "中国人123";
// 按照 GB2312 得到字节(得到多字节字符串)
Encoding Client=Encoding.GetEncoding("gb2312");
byte[] bytes = Client.GetBytes(str);
//服务端按照gb2312正确解码
Encoding ServerOK = Encoding.GetEncoding("gb2312");
string strServer = ServerOK.GetString(bytes);
Console.WriteLine("正确转换后的字符串为:"+strServer);
//服务端按照Unicode错误解码
strServer = Encoding.Unicode.GetString(bytes);
Console.WriteLine("错误转换后的字符串为:"+strServer);
}
}
}
using System;
using System.Text;
namespace WrongCode
{
class Class1
{
static void Main(string[] args)
{
//字符串类 String 中的内容是 UNICODE 字符串:
string str = "中国人123";
// 按照 GB2312 得到字节(得到多字节字符串)
Encoding Client=Encoding.GetEncoding("gb2312");
byte[] bytes = Client.GetBytes(str);
//服务端按照gb2312正确解码
Encoding ServerOK = Encoding.GetEncoding("gb2312");
string strServer = ServerOK.GetString(bytes);
Console.WriteLine("正确转换后的字符串为:"+strServer);
//服务端按照Unicode错误解码
strServer = Encoding.Unicode.GetString(bytes);
Console.WriteLine("错误转换后的字符串为:"+strServer);
}
}
}
private void Page_Load(object sender, System.EventArgs e)
{
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
if (!Page.IsPostBack)
{
Response.Write("还没有输入任何字符!<br><br>");
}
else
{
Label_1.Text="";
Label_2.Text="";
Label_0.Text=Convert.ToString((TextBox_1.Text).Length);
//ASCII编码输出
ByteFunction(TextBox_1.Text);
//字符码输出
CharFunction(TextBox_1.Text);
//HTML编码输出
HtmlFunction(TextBox_1.Text);
GB2312Function("");
}
}
//ASCII编码输出函数
void ByteFunction(string str)
{
Byte[] MyBytes=System.Text.Encoding.ASCII.GetBytes(str);
for (int i=0;i<str.Length;i++)
{
Label_2.Text+=Convert.ToString(MyBytes[i])+" ";
}
}
//字符码输出函数
void CharFunction(string str)
{
Byte[] MyBytes=System.Text.Encoding.ASCII.GetBytes(str);
Char[] MyChars=System.Text.Encoding.ASCII.GetChars(MyBytes);
//Label_2.Text=new string(MyChars);
for (int i=0;i<str.Length;i++)
{
Label_1.Text+=Convert.ToString(MyChars[i])+" ";
}
}
//HTML编码输出函数
void HtmlFunction(string str)
{
string Str_Html=(Server.HtmlEncode(str));
Label_3.Text=Str_Html;
Label_4.Text=Server.HtmlEncode(Str_Html);//对要在浏览器中显示的字符串进行编码。
}
void GB2312Function(string str)
{
string utfinfo = "document.write(/"alert('aa你好么??');/");";
string gb2312info = "";
Encoding utf8 = Encoding.UTF8;
Encoding gb2312 = Encoding.GetEncoding("gb2312");
byte[] unicodeBytes = utf8.GetBytes(utfinfo);
byte[] asciiBytes = Encoding.Convert(utf8, gb2312, unicodeBytes); // Convert the new byte[] into a char[] and then into a string.
char[] asciiChars = new char[gb2312.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
gb2312.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
gb2312info = new string(asciiChars);
Label_5.Text=gb2312info;
}
生产文字验证码
private void Page_Load(object sender, System.EventArgs e)
{
//获取GB2312编码页(表)
Encoding gb=Encoding.GetEncoding("gb2312");
//调用函数产生4个随机中文汉字编码
object[] bytes=CreateRegionCode(4);
//根据汉字编码的字节数组解码出中文汉字
string str1=gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[])));
string str2=gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[])));
string str3=gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[])));
string str4=gb.GetString((byte[])Convert.ChangeType(bytes[3], typeof(byte[])));
string strKey = str1+str2+str3+str4;
Session["regcode"] = strKey;
byte[] data = gb.GetBytes(strKey);
Response.ContentEncoding = gb;
Response.OutputStream.Write(data,0,data.Length);
}
/*
此函数在汉字编码范围内随机创建含两个元素的十六进制字节数组,每个字节数组代表一个汉字,并将
四个字节数组存储在object数组中。
参数:strlength,代表需要产生的汉字个数
*/
public static object[] CreateRegionCode(int strlength)
{
//定义一个字符串数组储存汉字编码的组成元素
string[] rBase=new String [16]{"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
Random rnd=new Random();
//定义一个object数组用来
object[] bytes=new object[strlength];
/**//*每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bject数组中
每个汉字有四个区位码组成
区位码第1位和区位码第2位作为字节数组第一个元素
区位码第3位和区位码第4位作为字节数组第二个元素
*/
for(int i=0;i<strlength;i++)
{
//区位码第1位
int r1=rnd.Next(11,14);
string str_r1=rBase[r1].Trim();
//区位码第2位
rnd=new Random(r1*unchecked((int)DateTime.Now.Ticks)+i);//更换随机数发生器的种子避免产生重复值
int r2;
if (r1==13)
{
r2=rnd.Next(0,7);
}
else
{
r2=rnd.Next(0,16);
}
string str_r2=rBase[r2].Trim();
//区位码第3位
rnd=new Random(r2*unchecked((int)DateTime.Now.Ticks)+i);
int r3=rnd.Next(10,16);
string str_r3=rBase[r3].Trim();
//区位码第4位
rnd=new Random(r3*unchecked((int)DateTime.Now.Ticks)+i);
int r4;
if (r3==10)
{
r4=rnd.Next(1,16);
}
else if (r3==15)
{
r4=rnd.Next(0,15);
}
else
{
r4=rnd.Next(0,16);
}
string str_r4=rBase[r4].Trim();
//定义两个字节变量存储产生的随机汉字区位码
byte byte1=Convert.ToByte(str_r1 + str_r2,16);
byte byte2=Convert.ToByte(str_r3 + str_r4,16);
//将两个字节变量存储在字节数组中
byte[] str_r=new byte[]{byte1,byte2};
//将产生的一个汉字的字节数组放入object数组中
bytes.SetValue(str_r,i);
}
return bytes;
}
}
图像保存到XML中
private void btnUpload_Click(object sender, System.EventArgs e)
{
//得到用户要上传的文件名
string strFilePathName = loFile.PostedFile.FileName;
string strFileName = Path.GetFileName(strFilePathName);
int FileLength = loFile.PostedFile.ContentLength;
if(FileLength<=0)
return;
try
{
Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组
Stream StreamObject = loFile.PostedFile.InputStream; //建立数据流对像
//读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度
StreamObject.Read(FileByteArray,0,FileLength);
string fileName = Server.MapPath(".//WriteXml.xml"); //要打开的文件
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
XmlNode root=xmlDoc.SelectSingleNode("dbImage");//查找<dbGuest>
XmlNodeList xnl=xmlDoc.SelectSingleNode("dbImage").ChildNodes;
int nIndex = xnl.Count;
//以下添加新结点
XmlElement xe1=xmlDoc.CreateElement("Image");//创建一个<User>节点
XmlElement xesub1=xmlDoc.CreateElement("ImageID");
xesub1.InnerText=nIndex.ToString();//设置文本节点
xe1.AppendChild(xesub1);//添加到<User>节点中
XmlElement xesub2=xmlDoc.CreateElement("ImageContentType");
xesub2.InnerText=loFile.PostedFile.ContentType;
xe1.AppendChild(xesub2);
XmlElement xesub3=xmlDoc.CreateElement("ImageSize");
xesub3.InnerText=FileLength.ToString();
xe1.AppendChild(xesub3);
XmlElement xesub4=xmlDoc.CreateElement("ImageDescription");
xesub4.InnerText=tbDescription.Text;
xe1.AppendChild(xesub4);
XmlElement xesub5=xmlDoc.CreateElement("ImageData");
xesub5.InnerText= Convert.ToBase64String(FileByteArray);
xe1.AppendChild(xesub5);
root.AppendChild(xe1);//添加到<dbGuest>节点中
xmlDoc.Save(fileName);
Response.Redirect("ShowAllImg.aspx");
}
catch
{
}
}
private void Page_Load(object sender, System.EventArgs e)
{
string fileName = Server.MapPath("./WriteXml.xml"); //要打开的文件
DataSet ds = new DataSet();
ds.ReadXml(fileName);
dgShow.DataSource = ds.Tables["image"].DefaultView;
dgShow.DataBind();
}
private void Page_Load(object sender, System.EventArgs e)
{
int ImgID = Convert.ToInt32(Request.QueryString["ID"]); //ID为图片ID
//建立数据库链接
string fileName = Server.MapPath(".//WriteXml.xml"); //要打开的文件
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
XmlNodeList node = xmlDoc.SelectSingleNode("//Image[ImageID='"+ImgID.ToString()+"']").ChildNodes;
if(node!=null)
{
string strType = node.Item(1).InnerText;
string strData =node.Item(4).InnerText;
int nSize = int.Parse(node.Item(2).InnerText);
Response.ContentType = strType;//设定输出文件类型
//输出图象文件二进制数制
Response.OutputStream.Write(Convert.FromBase64String(strData), 0, nSize);
Response.End();
//也可以保存为图像
// FileStream fs = new FileStream(@"C:/aa.BMP", FileMode.OpenOrCreate, FileAccess.Write);
// fs.Write((Convert.FromBase64String(strData), 0,nSize);
// fs.Close();
}