Foxtable(狐表)用户栏目专家坐堂 → FileSys用法中编码的问题?


  共有1704人关注过本帖树形打印复制链接

主题:FileSys用法中编码的问题?

帅哥哟,离线,有人找我吗?
sjzsdu
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:341 积分:2455 威望:0 精华:0 注册:2014/7/30 18:03:00
FileSys用法中编码的问题?  发帖心情 Post By:2017/4/21 17:40:00 [只看该作者]

Dim file As String = args(0)
Dim s As String = FileSys.ReadAllText(file, Encoding.UTF8)
FileSys.WriteAllText(file, s, False,Encoding.UTF8)

如果打开的文件既有utf8和gbk编码格式的,这时遍历文件夹就会存在问题。
能不能程序来判断要打开的文件的编码格式?




 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/21 17:58:00 [只看该作者]

mark txt编码

 

 

全局代码

 

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)
If buffer(0) >= &HEF Then
    If buffer(0) = &HEF AndAlso buffer(1) = &HBB
       
        Return System.Text.Encoding.UTF8
    Else If buffer(0) = &HFE AndAlso buffer(1) = &HFF
       
        Return System.Text.Encoding.BigEndianUnicode
       
    Else If buffer(0) = &HFF AndAlso buffer(1) = &HFE
       
        Return System.Text.Encoding.Unicode
       
    Else
       
        Return System.Text.Encoding.Default
    End If
Else
    Return System.Text.Encoding.Default
End If
br.close
fs.close
End Function

 

调用函数

 

Dim file As String = "g:\test.txt"
Dim s As String = FileSys.ReadAllText(file, GetFileEncodeType(file))
msgbox(s)

[此贴子已经被作者于2017/4/21 17:59:50编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
sjzsdu
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:341 积分:2455 威望:0 精华:0 注册:2014/7/30 18:03:00
  发帖心情 Post By: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)

命令窗口中执行有下面这个错误
那个函数已经放在全局代码里了

图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106092 积分:539565 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/4/22 10:22:00 [只看该作者]

这个和代码没有关系。文件是只读的,或者文件被其它程序锁定,无法保存

 回到顶部
帅哥哟,离线,有人找我吗?
sjzsdu
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:341 积分:2455 威望:0 精华:0 注册:2014/7/30 18:03:00
  发帖心情 Post By:2017/4/22 13:42:00 [只看该作者]

可是这个文件没有被打开,而且文件的属性也不是只读的。

会不会这个函数占用了这个文件,没有释放出来的原因

 回到顶部
帅哥哟,离线,有人找我吗?
sjzsdu
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:341 积分:2455 威望:0 精华:0 注册:2014/7/30 18:03:00
  发帖心情 Post By: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)

这样执行就可以,保存为原来的文件名就出错。但是这样不能满足要求

在做怎样的处理可以确保更改完内容保存到原文件内

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106092 积分:539565 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:341 积分:2455 威望:0 精华:0 注册:2014/7/30 18:03:00
  发帖心情 Post By:2017/4/22 15:22:00 [只看该作者]

嗯,这样就可以了。另外咨询个事情,UTF8无BOM和带BOM有什么区别

我在替换UTF格式编码文件时,带BOM的可以替换过来,不带BOM的就是替换不过来,

我们的这个System.Text.Encoding.UTF8可以做区分吗

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106092 积分:539565 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/4/22 16:11:00 [只看该作者]

请提供文件测试

https://www.baidu.com/baidu?word=UTF8无BOM&ie=utf-8&tn=myie2dg&ch=6

 回到顶部