如何用assembly csharp.dll程序吧一个超大TXT文件编码改成utf8编码,请个个具体程序

UTF-8文件头的问题(转) - 奋斗者 - 博客园
在读写有关UTF-8格式的文件时,特别是如UTF-8格式的txt文件时,经常会遇到由于UTF-8的文件头造成的乱码问题。最近又碰到了,写下来记录一下处理方式吧,有更好的方法,欢迎各位留言交流。
所有采用UTF-8格式编码的文件的文件头三个字节用16进制表示是EFBBBF,因此在读取UTF-8格式文件的时候,需要去掉这个文件头。而当你并不了解读取的文件是GBK格式还是UTF-8格式时,你就不得不通过这个文件头来判断了。具体可以按照如下方式判断:
1、从文件流中读取前三个字节到一个byte[3]数组中;2、通过Integer.toHexString(byte[0] & 0xFF),将byte[3]数组中的三个byte分别转换成16进制的字符表示;3、根据对三个byte进行转换后得到的字符串,与UTF-8格式头EFBBBF进行比较即可知道是否UTF-8格式。
读UTF-8格式文件的时候,需要注意文件头,而在输出UTF-8文件的时候,同样也要注意这个文件头,否则你输出的文件,在使用记事本打开时,会出现乱码。为了将EFBBBF作为文件头输出,可以如下操作:
1、分别得到EF、BB、BF三个byte,比如得到EF,可以这样
byte b0 = Byte.decode("0xE").byteValue();&& //得到16进制E的byte值b0 = (byte)(b0 && 4);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //将16进制E的byte值左移4为byte b1 = Byte.decode("0xF").byteValue();&& //得到16进制F的byte值byte ef = (b0 | b1);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //将左移4位后的E与F进行或操作
2、将得到的EF、BB、BF按照顺序作为UTF-8文件的第一、二、三个字节输出到文件。
我做过实验,用C语言读一个utf-8的txt文件,用二进制的方式读入时,在调试下就可以看到utf-8的文件头,即文件读进来的前三个字节都不是文件的内容,而是utf-8的标志。而我在windows下新建的一个txt文档,windows下默认是gbk的,所以用c去读的时,没有发现有前三个字节是标志编码格式的,而第一个字节就是txt的文件内容。
随笔 - 1212011年9月 C/C++大版内专家分月排行榜第二2011年4月 C/C++大版内专家分月排行榜第二2010年11月 C/C++大版内专家分月排行榜第二
2011年6月 C/C++大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2011年9月 C/C++大版内专家分月排行榜第二2011年4月 C/C++大版内专家分月排行榜第二2010年11月 C/C++大版内专家分月排行榜第二
2011年6月 C/C++大版内专家分月排行榜第三
2011年9月 C/C++大版内专家分月排行榜第二2011年4月 C/C++大版内专家分月排行榜第二2010年11月 C/C++大版内专家分月排行榜第二
2011年6月 C/C++大版内专家分月排行榜第三
2013年6月 Linux/Unix社区大版内专家分月排行榜第二2013年5月 Linux/Unix社区大版内专家分月排行榜第二2013年3月 Linux/Unix社区大版内专家分月排行榜第二2013年1月 Linux/Unix社区大版内专家分月排行榜第二2012年12月 Linux/Unix社区大版内专家分月排行榜第二2012年8月 Linux/Unix社区大版内专家分月排行榜第二2011年12月 Linux/Unix社区大版内专家分月排行榜第二2011年10月 C/C++大版内专家分月排行榜第二2011年10月 Linux/Unix社区大版内专家分月排行榜第二
2012年6月 C/C++大版内专家分月排行榜第三2012年6月 PHP大版内专家分月排行榜第三2012年5月 C/C++大版内专家分月排行榜第三2012年3月 Linux/Unix社区大版内专家分月排行榜第三2012年2月 Linux/Unix社区大版内专家分月排行榜第三2011年11月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 microsoft.csharp.dll 的文章

 

随机推荐