苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 8707|回复: 10

[其他] 创建 txt 不能够控制文件编码

[复制链接]
发表于 2013-6-26 15:49:48 | 显示全部楼层 |阅读模式
本帖最后由 qq576733600 于 2013-6-26 16:36 编辑

使用js  创建 txt 不能够控制文件编码 就会有乱码问题
js创建文件
  1. var fso=new ActiveXObject("Scripting.FileSystemObject"); //实例化
  2. var f1=fso.createtextfile("e:\\b.txt",true); //创建记事本
复制代码
C# FileInfo 创建文件 也不能创建指定编码文件
  1.   FileInfo file = new FileInfo("文件路径");
  2.        file.Create();
复制代码
有没有朋友能够解决创建指定编码文件的问题。
补充一下。 不是 文件内容的编码 而是文件的 编码
如:ANSI 、 Unicode 、 Unicode big endian 、 UTF-8

本帖被以下淘专辑推荐:



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-6-26 16:06:42 | 显示全部楼层
[code=csharp]    StreamWriter sw = new StreamWriter(path,Encoding.UTF8);
            sw.Write();
            sw.Close();[/code]
这种可以
你的FileInfo 只是创建文件并没有写入内容,所以是无法确定编码的,自然就不能指定了,只有在写入时才需要设置编码
 楼主| 发表于 2013-6-26 16:33:13 | 显示全部楼层
站长苏飞 发表于 2013-6-26 16:06
这种可以
你的FileInfo 只是创建文件并没有写入内容,所以是无法确定编码的,自然就不能指定了,只有在 ...

需要的是文件的编码,不是文件内容的编码。



发表于 2013-6-26 16:38:40 | 显示全部楼层
qq576733600 发表于 2013-6-26 16:33
需要的是文件的编码,不是文件内容的编码。

编码是针对内容的,和文件无关的,你要先能清楚这点,就算是你创建的文件是gb2312的,你写内容是指定的是utf-8的那文件内容还是utf-8的不可能是gb2312的,所以文件的编码类型是由内容来确定的,本身不存在编码类型。
你使用上面的方法写入为空就是默认编码类型了。

 楼主| 发表于 2013-6-26 16:46:09 | 显示全部楼层
站长苏飞 发表于 2013-6-26 16:38
编码是针对内容的,和文件无关的,你要先能清楚这点,就算是你创建的文件是gb2312的,你写内容是指定的是 ...

这个跟我的使用场景有关,所以要求创建一个 UTF_8 的 txt 文件。
发表于 2013-6-26 17:00:54 | 显示全部楼层
[code=csharp] StreamWriter sw = new StreamWriter(path,Encoding.UTF8);
            sw.Write("");
            sw.Close();[/code]
那这样不就行了,肯定是Utf-8的
 楼主| 发表于 2013-6-26 17:10:27 | 显示全部楼层
站长苏飞 发表于 2013-6-26 17:00
那这样不就行了,肯定是Utf-8的

飞哥 你貌似记错了吧
StreamWriter sw = new StreamWriter(path,bool);  支有这个构造方法  是一个布尔 知否追加文本

只有一个
StreamWriter sw = new StreamWriter(Steam,Encoding.UTF8);   但是这个 貌似也是写文件内容吧。 能创建一个 UTF-8 的 txt 的文件?
发表于 2013-6-26 17:16:56 | 显示全部楼层
哎,你不能看看注释啊,同志,还真得我一个一个的给你写全了才行
[code=csharp]  StreamWriter sw = new StreamWriter(path, false, Encoding.UTF8);
            sw.Write("");
            sw.Close();[/code]
看看这个方法的注释
[code=csharp]   //
        // 摘要:
        //     使用指定编码和默认缓冲区大小,为指定路径上的指定文件初始化 System.IO.StreamWriter 类的新实例。如果该文件存在,则可以将其覆盖或向其追加。如果该文件不存在,则此构造函数将创建一个新文件。
        //
        // 参数:
        //   path:
        //     要写入的完整文件路径。
        //
        //   append:
        //     确定是否将数据追加到文件。如果该文件存在,并且 append 为 false,则该文件被覆盖。如果该文件存在,并且 append 为 true,则数据被追加到该文件中。否则,将创建新文件。
        //
        //   encoding:
        //     要使用的字符编码。
        //
        // 异常:
        //   System.UnauthorizedAccessException:
        //     访问被拒绝。
        //
        //   System.ArgumentException:
        //     path 为空。- 或 -path 包含系统设备的名称(com1、com2 等等)。
        //
        //   System.ArgumentNullException:
        //     path 为 null。
        //
        //   System.IO.DirectoryNotFoundException:
        //     指定的路径无效,比如在未映射的驱动器上。
        //
        //   System.IO.IOException:
        //     path 包含不正确或无效的文件名、目录名或卷标的语法。
        //
        //   System.IO.PathTooLongException:
        //     指定的路径、文件名或者两者都超出了系统定义的最大长度。例如,在基于 Windows 的平台上,路径必须小于 248 个字符,文件名必须小于 260
        //     个字符。
        //
        //   System.Security.SecurityException:
        //     调用方没有所要求的权限。
        [SecuritySafeCritical]
        public StreamWriter(string path, bool append, Encoding encoding);[/code]
又是谁告诉你的这个方法只有两个参数你在这个类上F12看一下就明白了。
发表于 2013-6-26 17:18:51 | 显示全部楼层
另外看清楚这第二个参数
  1. append:
  2.         //     确定是否将数据追加到文件。如果该文件存在,并且 append 为 false,则该文件被覆盖。如果该文件存在,并且 append 为 true,则数据被追加到该文件中。否则,将创建新文件。
复制代码
会不会创建文件,这很简单你不相信可以测试一下,一共了没几行代码。
 楼主| 发表于 2013-6-26 17:23:18 | 显示全部楼层
站长苏飞 发表于 2013-6-26 17:16
哎,你不能看看注释啊,同志,还真得我一个一个的给你写全了才行

看看这个方法的注释

文件流 用的比较少, 不熟悉。 测试没有问题。 谢谢啦。

代码:
  1. StreamWriter sw = new StreamWriter("", true, Encoding.UTF8);
  2.           sw.Write("");
  3.           sw.Close();
复制代码
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-26 15:43

© 2014-2021

快速回复 返回顶部 返回列表