C#将字符转换成utf8编码 GB321编码转换

C#将字符转换成utf8编码 GB321编码转换,第1张

public staticstring get_uft8(string unicodeString)

{

UTF8Encoding utf8 = new UTF8Encoding()

Byte[] encodedBytes = utf8.GetBytes(unicodeString)

String decodedString = utf8.GetString(encodedBytes)

return decodedString

}

这边我以big5转换gb2312为例

Encoding big5 =Encoding.GetEncoding("big5")

Encoding gb2312 = Encoding.GetEncoding("gb2312")

byte[] big5b= big5.GetBytes("编程无悔!")

//关键也就是这句了

byte[] gb2312b= Encoding.Convert(big5,gb2312,big5b)

string strGb2312 = gb2312.GetString(gb2312b)

//写文件使用默认的即可,这样就能适应所有计算机了。

filePath = Path.GetDirectoryName(Application.ExecutablePath) + "\CSVFiles\" + DateTime.Now.ToString("yyyy-MM-dd_HHmmss") + ".csv"

fs = new FileStream(filePath, FileMode.Create)

sw = new StreamWriter(fs, Encoding.Default)

Linux 下查看文件字符编码和转换编码 如果你需要在 Linux 中 *** 作 windows 下的文件,那么你可能会经常遇 到 文 件 编 码 转 换 的 问 题 。 Windows 中 默 认 的 文 件 格 式 是 GBK(gb2312),而 Linux 一般都是 UTF-8。下面介绍一下,在 Linux 中如何查看文件的编码及如何进行对文件进行编码转换。

一,查看文件编码: 在 Linux 中查看文件编码可以通过以下几种方式:

1.在 Vim 中可以直接查看文件编码 :set fileencoding 即可显示文件编码格式。 如果你只是想查看其它编码格式的文件或者想解决用 Vim 查看文件乱 码的问题,那么你可以在 ~/.vimrc 文件中添加以下内容: set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936 这样, 就可以让 vim 自动识别文件编码 (可以自动识别 UTF-8或者 GBK 编码的文件) ,其实就是依照 fileencodings 提供的编码列表尝试,如 果没有找到合适的编码,就用 latin-1(ASCII)编码打开。

2. enca (如果你的系统中没有安装这个命令,可以用 sudo yum install -y enca 安装 )查看文件编码 $ enca filename filename: Universal transformation format 8 bitsUTF-8 CRLF line terminators 需要说明一点的是,enca 对某些 GBK 编码的文件识别的不是很好,识 别时会出现: Unrecognized encoding

二,文件编码转换

1.在 Vim 中直接进行转换文件编码,比如将一个文件转换成 utf-8格式 :set fileencoding=utf-8

2. iconv 转换,iconv 的命令格式如下:输入/输出格式规范: -f, --from-code=名称 原始文本编码 -t, --to-code=名称 输出编码 信息: -l, --list 列举所有已知的字符集 输出控制: -c 从输出中忽略无效的字符 -o, --output=FILE 输出文件 Svn8.Com -s, --silent 关闭警告 --verbose 打印进度信息 -?, --help 给出该系统求助列表 --usage 给出简要的用法信息 -V, --version 打印程序版本号 例子: iconv -f utf-8 -t gb2312 aaa.txt >bbb.txt 这个命令读取 aaa.txt 文件,从 utf-8编码转换为 gb2312编码,其输出定向到 bbb.txt文件。 iconv -f encoding -t encoding inputfile 比如将一个 UTF-8 编码的文件转换成 GBK 编码 iconv -f GBK -t UTF-8 file1 -o file2

3. enconv 转换文件编码 比如要将一个 GBK 编码的文件转换成 UTF-8编码, *** 作如下 enconv -L zh_CN -x UTF-8 filename

前面做一个基于sybase的mis系统, 由于sybase的后台是cp850编码,而.net平台不支持cp850编码。所以在程序中所有从数据库读出的中文都显示为''?''。

于是考虑在.net 平台中转换字符编码。于是查看了.net中字符编码的类System.Text.Encoding

里面支持的字符集编码有ibm850,没有cp850,后来查看资料才知道原来这两个名字指的是同一种编码规范。

于是开始进行编码转换,首先找到一个java的程序:

public String CP850ToGB2312(String str)

...{

try

...{

byte[] temp = str.getBytes("cp850")

String result = new String(temp, "gb2312")

return result

}

catch (UnsupportedEncodingException ex)

...{ return null}

}

public String GB2312ToCP850(String str)

...{

try

...{

byte[] temp = str.getBytes("gb2312")

String result = new String(temp, "cp850")

return result

}

catch (UnsupportedEncodingException ex)

...{

return null

}

}

然后在根据查找的System.Text.Encoding类的属性,方法写了如下的转换程序:

public string UTF8ToGB2312(string str)

...{

try

...{

Encoding utf8 = Encoding.GetEncoding(65001)

Encoding gb2312 = Encoding.GetEncoding("gb2312")//Encoding.Default ,936

byte[] temp = utf8.GetBytes(str)

byte[] temp1 = Encoding.Convert(utf8, gb2312, temp)

string result = gb2312.GetString(temp1)

return result

}

catch (Exception ex)//(UnsupportedEncodingException ex)

...{

MessageBox.Show(ex.ToString())

return null

}

}

public string GB2312ToUTF8(string str)

...{

try

...{

Encoding uft8 = Encoding.GetEncoding(65001)

Encoding gb2312 = Encoding.GetEncoding("gb2312")

byte[] temp = gb2312.GetBytes(str)

MessageBox.Show("gb2312的编码的字节个数:" + temp.Length)

for (int i = 0i <temp.Lengthi++)

...{

MessageBox.Show(Convert.ToUInt16(temp[i]).ToString())

}

byte[] temp1 = Encoding.Convert(gb2312, uft8, temp)

MessageBox.Show("uft8的编码的字节个数:" + temp1.Length)

for (int i = 0i <temp1.Lengthi++)

...{

MessageBox.Show(Convert.ToUInt16(temp1[i]).ToString())

}

string result = uft8.GetString(temp1)

return result

}

catch (Exception ex)//(UnsupportedEncodingException ex)

...{

MessageBox.Show(ex.ToString())

return null

}

}

主要使用的就是获取编码方式的类对象,

Encoding utf8 = Encoding.GetEncoding(65001)//使用code page

Encoding gb2312 = Encoding.GetEncoding("gb2312")//通过bodyname

获取字符编码字节序列:byte[] temp=utf8.GetBytes(str)

编码方式转换:byte[] temp1=Encoding.Convert(utf8, gb2312, temp)

获取编码的字符串:string str1=gb2312.GetString(temp1)

这样即完成了字符编码的转换。

Encoding.Default在 简体中文os中一般是gb2312格式。

static void Main(string[] args)

{

FileStream fs

string fileName = "C://test.xml"

string message = "呵呵"

string m=System.Web.HttpUtility.UrlEncode(message, System.Text.Encoding.UTF8)

fs = new FileStream(fileName, FileMode.OpenOrCreate)

StreamWriter sw = new StreamWriter(fs)

fs.Seek(0, SeekOrigin.End)

sw.WriteLine("<?xml version=/"1.0/" encoding=/"UTF-8/"?><menu>" + message + "</menu>")

sw.Close()

fs.Close()

Console.Read()

}

private static string ToGB2312(string utfInfo)

{

string gb2312Info = string.Empty

Encoding utf8 = Encoding.UTF8

Encoding gb2312 = Encoding.GetEncoding("gb2312")

byte[] unicodeBytes = utf8.GetBytes(utfInfo)

byte[] asciiBytes = Encoding.Convert(utf8, gb2312, unicodeBytes)

char[] asciiChars = new char[gb2312.GetCharCount(asciiBytes, 0, asciiBytes.Length)]

gb2312.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0)

string gb2312info = new string(asciiChars)

return gb2312info

}

private static string ToUTF8(string gb2312Info)

{

string utf8Info = string.Empty

Encoding utf8 = Encoding.UTF8

Encoding gb2312 = Encoding.GetEncoding("gb2312")

byte[] unicodeBytes = gb2312.GetBytes(gb2312Info)

byte[] asciiBytes = Encoding.Convert(gb2312, utf8, unicodeBytes)

char[] asciiChars = new char[utf8.GetCharCount(asciiBytes, 0, asciiBytes.Length)]

utf8.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0)

string utf8info = new string(asciiChars)

return utf8info

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11913209.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存