以文本方式查看主题 - Foxtable(狐表) (http://www.foxtable.com/bbs/index.asp) -- 专家坐堂 (http://www.foxtable.com/bbs/list.asp?boardid=2) ---- FileSys用法中编码的问题? (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=99583) |
-- 作者:sjzsdu -- 发布时间:2017/4/21 17:40:00 -- FileSys用法中编码的问题? Dim file As String = args(0) Dim s As String = FileSys.ReadAllText(file, Encoding.UTF8) FileSys.WriteAllText(file, s, False,Encoding.UTF8) 如果打开的文件既有utf8和gbk编码格式的,这时遍历文件夹就会存在问题。 能不能程序来判断要打开的文件的编码格式? |
-- 作者:有点色 -- 发布时间:2017/4/21 17:58:00 -- mark txt编码
全局代码
Public Function GetFileEncodeType(filename As String) As System.Text.Encoding
调用函数
Dim file As String = "g:\\test.txt" [此贴子已经被作者于2017/4/21 17:59:50编辑过]
|
-- 作者:sjzsdu -- 发布时间:2017/4/22 8:53:00 -- Dim file As String = "D:\\暂存\\ceshi\\haha.html" Dim encode As System.Text.Encoding = GetFileEncodeType(file) Dim s As String = FileSys.ReadAllText(file, encode) s = Replace(s,"美文网", "爱阅读") FileSys.WriteAllText(file, s, False,encode) 命令窗口中执行有下面这个错误 那个函数已经放在全局代码里了 |
-- 作者:有点蓝 -- 发布时间:2017/4/22 10:22:00 -- 这个和代码没有关系。文件是只读的,或者文件被其它程序锁定,无法保存 |
-- 作者:sjzsdu -- 发布时间:2017/4/22 13:42:00 -- 可是这个文件没有被打开,而且文件的属性也不是只读的。 会不会这个函数占用了这个文件,没有释放出来的原因
|
-- 作者:sjzsdu -- 发布时间:2017/4/22 14:20:00 -- Dim file As String = "D:\\暂存\\ceshi\\haha.html" Dim encode As System.Text.Encoding = GetFileEncodeType(file) Dim s As String = FileSys.ReadAllText(file, encode) s = Replace(s,"美文网", "爱阅读") FileSys.WriteAllText("D:\\暂存\\ceshi\\haha11.html", s, False,encode) 这样执行就可以,保存为原来的文件名就出错。但是这样不能满足要求 在做怎样的处理可以确保更改完内容保存到原文件内
|
-- 作者:有点蓝 -- 发布时间:2017/4/22 14:36:00 -- 全局代码改改 Public Function GetFileEncodeType(filename As String) As System.Text.Encoding Dim fs = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read) Dim br = new System.IO.BinaryReader(fs) Dim buffer = br.ReadBytes(2) Dim code As System.Text.Encoding = System.Text.Encoding.Default If buffer(0) >= &HEF Then If buffer(0) = &HEF AndAlso buffer(1) = &HBB code = System.Text.Encoding.UTF8 Else If buffer(0) = &HFE AndAlso buffer(1) = &HFF code = System.Text.Encoding.BigEndianUnicode Else If buffer(0) = &HFF AndAlso buffer(1) = &HFE code = System.Text.Encoding.Unicode End If End If br.close fs.close Return code End Function
[此贴子已经被作者于2017/4/22 14:36:38编辑过]
|
-- 作者:sjzsdu -- 发布时间:2017/4/22 15:22:00 -- 嗯,这样就可以了。另外咨询个事情,UTF8无BOM和带BOM有什么区别 我在替换UTF格式编码文件时,带BOM的可以替换过来,不带BOM的就是替换不过来, 我们的这个System.Text.Encoding.UTF8可以做区分吗
|
-- 作者:有点蓝 -- 发布时间:2017/4/22 16:11:00 -- 请提供文件测试 https://www.baidu.com/baidu?word=UTF8无BOM&ie=utf-8&tn=myie2dg&ch=6
|