精华内容
下载资源
问答
  • 不知道为什么保存文件后之前打开一直都OK,就突然打开看到变成乱码了,最后解决了 关键:outStream.write(finalContent.getBytes("gbk")); write的时候设置一下:转换格式(UFT-8在android不能用,只能用gbk)!!...

    不知道为什么保存文件后之前打开一直都OK,就突然打开看到变成乱码了,最后解决了

    关键:outStream.write(finalContent.getBytes("gbk"));

    write的时候设置一下:转换格式(UFT-8在android不能用,只能用gbk)!!!我之前试过utf-8,还是乱码,没什么用,就是gbk!

    从项目里面抽取了这个把String保存为txt到本地的方法:

    String sdCardDir =Environment.getExternalStorageDirectory().getAbsolutePath();
                    File saveFile = new File(sdCardDir, "aaaa.txt");//new FileOutputStream(file, true);true:不覆盖写入文件
                    FileOutputStream outStream = null;
                    try {
                        outStream = new FileOutputStream(saveFile);
                        outStream.write(finalContent.getBytes("gbk"));//UFT-8在android不能用,只能用gbk!!!不设置的话可能会变成乱码!!!
                        outStream.close();
                        outStream.flush();
                        isSave = true;
                        Toast.makeText(PusherEndActivity.this, "文件已经保存啦!赶快去查看吧!", Toast.LENGTH_SHORT).show();
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

    顺便贴一下 按一个button,然后跳转到文件管理器,打开txt的方法,我这里有个isSave布尔类型判断了一下是不是之前已经保存了文件

    btn_open_txt.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (isSave){
                    
                        String path = Environment.getExternalStorageDirectory().getPath();
                        File file = new File(path);
                        Intent intent1 = new Intent(Intent.ACTION_GET_CONTENT);
    
                        intent1.addCategory(Intent.CATEGORY_DEFAULT);
                        intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             
                        intent1.setDataAndType(Uri.fromFile(file), "text/plain");
                        try {
                            startActivity(intent1);
                            finish();
    //            startActivity(Intent.createChooser(intent,"选择浏览工具"));
                        } catch (ActivityNotFoundException e) {
                            e.printStackTrace();
                        }
    
                    }else {
                        Toast.makeText(PusherEndActivity.this, "还没有保存文件哦!", Toast.LENGTH_SHORT).show();
                    }
    
    
                }
            });

     感谢:https://blog.csdn.net/wsqfwqfsdge3wg/article/details/54614089 成功解决我的问题

    转载于:https://www.cnblogs.com/oreox/p/10778098.html

    展开全文
  • <p>#include<stdio.h> #include<stdlib.h>...在 result.txt文件里 除了姓名 其余的数字全一些乱码和“烫烫” 以及"屯屯"  求求大神吗 能告诉萌新小白这是为什么吗</p>
  • 为什么?CSV用UTF-8编码的,而EXCELANSI编码,由于编码方式不一致导致出现乱码。明白了原因之后,我们只需要把CSV文件的编码方式修改成与Excel相同的编码方式就可以了。那怎么修改?先将CSV用txt记事本打开,...

    工作中,将python生成的中间结果文件写入CSV,经常这么干是不是?文件保存下来后用excel打开,出现了乱码情况,真心烦。为什么?

    这里写图片描述

    CSV是用UTF-8编码的,而EXCEL是ANSI编码,由于编码方式不一致导致出现乱码。明白了原因之后,我们只需要把CSV文件的编码方式修改成与Excel相同的编码方式就可以了。那怎么修改?

    这里写图片描述

    先将CSV用txt记事本打开,然后选择ANSI编码方式。另存为,点编码这里,这里的编码有这么几种选择。
    这里写图片描述

    选择ANSI,然后保存,再用Excel打开,就不会有乱码了。

    微信公众号“数据分析师手记”,欢迎关注
    这里写图片描述

    展开全文
  • 1.ObjectOutputStream 对Java对象进行序列化处理,处理后的数据,不是文本数据, 所以,该数据保存到文件中,用文本编辑器打开,必然是乱码。2.输出流,在写入之后,一般都会调用flush方法,将缓冲区的数据刷到IO中...

    在写入对象文件的过程中,采用了txt文件,发现文件乱码,引发了思考。

    首先需要理解好IO流是如何处理文件的。

    1.ObjectOutputStream 对Java对象进行序列化处理,处理后的数据,不是文本数据,

    所以,该数据保存到文件中,用文本编辑器打开,必然是乱码。

    2.输出流,在写入之后,一般都会调用flush方法,将缓冲区的数据刷到IO中去

    (当然,楼主的目的地是硬盘文件中)。IO读写,一般情况下,操作系统也会建立一定大小的缓冲区。

    3.输出流,在所有写入操作都做完后,应该关闭IO流,调用close方法。

    除了可以回收系统资源外,也会强制刷新系统缓冲区中的数据至硬盘。

    4.object_in引用对应的是输入流对象,流是流动的,当你上面写入一个对象到文件中后,

    下面就只能从那个文件中读取一个对象,再调用读取方法,什么也读不到。

    所以,System.out.println(object_in.readObject());的参数应该是li。

    5.输入流在读取完成后,也要进行关闭,回收系统资源。

    同时一定要记得关闭资源

    最后,针对之前说的乱码问题,我上面已经说明了,

    各位应该仔细理解Java对象的序列话操作到底干了什么。

    它不是简单的把对象属性值写入IO流中,而是按照一定的数据格式写入的。

    而这种格式,不是记事本、写字板、Word等文本编辑器能够识别的,

    因为,这些数据,压根就不是文本数据。

    只有使用相同版本的Java的ObjectInputStream来进行读取操作。

    并且,流数据,在没有缓冲区的情况下,是不能读取重复数据的。

    也就是说,如果,我的文本文件中,存放12345这五个字符,

    那么,我用流读取一个字符,第一个是字符1,第二次读取,必然是字符2,

    不可能还是字符1,除非你用带缓冲区缓的流对象,这样,你在读取前先做标记,

    读取完了,可以回退到标记处,重复读取数据,

    当然,数据的当前位置和标记位置之间的距离不能超过缓冲区的大小。

    package cn.jd.io;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.util.Date;
    /*
     * 对象流:
     * 1先写出后读取
     * 2读取的顺序和写出保持一致
     * 3不是所有的对象都可以序列化Serializable
     */
    public class ObjectTest3 {
    	public static void main(String[] args) throws IOException, ClassNotFoundException {
    		
    		ObjectOutputStream oos=
    				new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("obj.ser")));
    		oos.writeUTF("我太难了");
    		oos.writeInt(18);
    		oos.writeBoolean(false);
    		//加入对象
    		oos.writeObject("希望世界和平");
    		oos.writeObject(new Date());
    		Employee emp=new Employee("小二",400);
    		oos.writeObject(emp);
    		oos.flush();
    		oos.close();
    		  
    		ObjectInputStream ois=
    				new ObjectInputStream(new BufferedInputStream(new FileInputStream("obj.ser")));
    		 String msg=ois.readUTF();
    		 int age=ois.readInt();
    		 boolean flag=ois.readBoolean();
    		 Object str=ois.readObject();
    		 Object date=ois.readObject();
    		 Object employee=ois.readObject();
    		 //接下来我们就将类型还原,这里我们必须加上类型转换
    		 if(str instanceof String) {
    			 String strObj=(String)str;
    //			 System.out.println(strObj);
    		 }
    		 if(date instanceof Date) {
    			 Date dateObj=(Date)date;
    //			 System.out.println(dateObj);
    		 }
    		 if(employee instanceof Employee) {
    			Employee empObj=(Employee)employee;
    			 System.out.println(empObj.getName()+"-->"+empObj.getSalary());
    		 }
    //		 System.out.println(msg);
    		 ois.close();
    		 
    		 
    		 
    		 
    	}
    }
    d65fe3d4663665dec8bac5f0def518b5.png
    https://www.zhihu.com/video/1229752143528869888
    展开全文
  • /usr/bin/env python# -*- coding: utf-8 -*-file = open(r"D:\Android\python\test.txt","w+")file.write('hello')file.read()python test1.py后,用记事本打开文件显示乱码,请问这怎么回事啊?Windows下的编码...

    windows7 +2.7.5

    我的源代码:

    #!/usr/bin/env python

    # -*- coding: utf-8 -*-

    file = open(r"D:\Android\python\test.txt","w+")

    file.write('hello')

    file.read()

    python test1.py后,用记事本打开文件显示乱码,请问这是怎么回事啊?

    8bf5ad8e34ff06d9feb4a873884369dc.png

    Windows下的编码是个大坑,别用记事本了,换nodepad++吧。

    请特别阅读 @依云 的答案。分析上游代码和文档,这才是真正坚不可摧的力量。

    同仁们,误入歧途了啊!!!别在ASCII的文件上这么深入的追究编码问题啊!!!

    我试了一下,果然爽翻:#!/usr/bin/env python

    # -*- coding: utf-8 -*-

    f = open(r"C:\Users\776\test.txt","w+")

    # 注:w+ truncates the file - 因此文件无论存在与否,结果一致

    f.write('hello')

    print(f.read())

    f.close()

    # 结果不贴了,同样不忍直视,传送门:http://paste.openstack.org/show/61806/

    我没有深入的究其原因,不过大概能猜到理由是什么:文件的指针位置。

    open()以w+模式开启了一个读写模式的文件,由于是w,所以文件被废弃清空(truncate),此时的文件内容为[EOF],开启时的指针为0。此时如果做read(),则Python发现指针位置就是EOF,读取到空字符串。

    在写入hello之后,指针的位置是5,文件在内存中是hello[EOF]。

    但看起来read()的时候,Python仍然去试图在磁盘的文件上,将指针从文件头向后跳5,再去读取到EOF为止。

    也就是说,你实际上是跳过了该文件真正的EOF,为硬盘底层的数据做了一个dump,一直dump到了一个从前文件的[EOF]为止。所以最后得到了一些根本不期待的随机乱字符(这里根本不是编码问题造成的乱码!)。

    (看起来似乎还暴露了一些以前文件的内容呢,C:\Anaconda\神马的 :D)

    解决这个问题,你需要在读文件之前,用file对象的flush()方法,将已修改的文件内容可靠写盘:#!/usr/bin/env python

    # -*- coding: utf-8 -*-

    f = open(r"C:\Users\776\test.txt","w+")

    # 注:w+ truncates the file - 因此文件无论存在与否,结果一致

    f.write('hello') # 此时指针=5,内存内容=`hello[EOF]`

    f.flush() # 此时硬盘内容=`hello[EOF]`

    print(f.read()) # 此时指针=5,正好在[EOF]上,正确输出''

    f.seek(0) # 指针归0

    print(f.read()) # 正确从头读出全部内容'hello'

    f.close()

    这并不是完美的解决方法,因为我总觉得flush()应该是真正决定写盘之前才做的,而不是read()一次就flush()一次。read()似乎还是优先读取内存缓冲区更有道理。

    但总之至少猜测到了一个原因,并一定程度解决问题,更好的方法有待补充吧?

    乱码应该是报错信息,读文件之前先打开,最后还最好要 close

    试试下面这个#!/usr/bin/env python

    # -*- coding: utf-8 -*-

    file = open(r"D:\Android\python\test.txt","w+")

    file.write('hello')

    file = open("D:\Android\python\test.txt")

    file.read()

    file文件的读写,一定要注意,在写完之后,必须要seek(0),把文件指针重新指向文件开头,然后再读,否则就会从缓冲区读取一大堆乱码——顺便,这是不是一个潜在的缓冲区溢出漏洞啊。

    更新:

    我在路上就在想,这么底层的一个特性,为什么 Python 没有为程序员处理掉呢?都用 Python 了,谁会为了那么大的便利牺牲一丁点性能呢?一回来我就做了测试。

    经测试,Python 2.7.5 on Windows XP 重现此情况,Python 3.3.2 on Windows XP 没有重现。这说明 Python 2 确实该换了!

    再次更新:

    找到原因之后我就觉得这问题在哪里见过,今天终于找出来了, python-cn 邮件列表里讨论过的。

    真正的答案来啦~~我在 MSDN 里找得好苦哦 QAQ

    真正的原因不在于 Python 怎么样了,而在于 Windows 怎么样了。经查源码(Python 2.7.6)Objects/fileobject.c:2837,Python 是使用 fopen/fread/fwrite 这系列函数来读写文件的。MSDN 说:

    所以会有 @沙渺 发现添加 flush() 调用后正确的结果。

    Linux 下没有重现。man 3 fopen 说:

    所以 Windows 的这种行为是符合 ANSI C 标准的,但是 Linux 并不(总是)需要这样做。(并且,跨平台的方案是使用文件定位函数而不是 fflush()。)

    玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd19887.html

    相关文章 Recommend

    展开全文
  • 为什么? CSV 用 UTF-8 编码的,而 EXCEL ANSI 编码,由于编码方式不一致导致出现乱码。明白了原因之后,我们只需要把 CSV 文件的编码方式修改成与 Excel 相同的编码方式就可以了。那怎么修改? 先将 CSV 用 ...
  • 在windows中,中文压缩一般.gbbk,而在linux环境中压缩utf8,这就导致了在 windows下能正常显示的.txt文件在linux中打开后呈现乱码状态。对于这种情况的处理方法在包含要打开的.txt文件的目录下,在终端输 入...
  • 请问在对文件进行读写的时候,将一double型的数组写进文件中,之后打开文件为什么是乱码?怎么修改才能在文件中显示数值呢? 附写的代码: #include #include #include struct type { double data[2]...
  • printf("打开文件失败,可能文件不存在\n"); return false; } if(head->next==NULL) { linklist *p,*k; k=p; while(!feof(fp)) { p=LEN; fread(p,sizeof(linklist),1,fp); //将...
  • 这是什么原因呢,检查代码各个标签格式都没有问题,经过百度之后,才知道,记事本保存的TXT文件编码格式默认是ANSI,但是文本里面的内容编辑是用的UTF-8,存储与编辑的格式不对,导致浏览器打开是乱码(网页编码用的...
  • 乱码情况 写了一段导出 CSV 文件的代码,可以...使用 CSV 和 TXT 程序打开文件是正常的,但是使用 Excel 打开文件就出现了中文乱码的问题(这就奇怪了, 为什么在 Excel 中会乱码呢?) 通过查看编码发现,导出的 CSV ...
  • window.open打开txt文件

    2020-09-28 17:53:54
    后端接口返回txt文件的url后,通过window.open(url)方法,直接在浏览器中显示txt内容的(且内容为乱码),但是我们需要的下载功能(除了txt的,其他格式的都下载,eg:word,excel,ppt等)。 参考: ...
  • 代码如下,写入文件之后再打开txt发现除了前面的学号,后面的都是乱码。各行写有注释,请各位帮忙看一下,我觉得可能是宽字节的问题,但是本人是小白不知道该怎么弄,谢谢各位。 ``` void Add::OnClickedIdbAdd() { ...
  • 你的INI文件是什么编码。打开INI文件,另存,下面选择编码。如果你的程序非UNICODE,就选择ANSI,如果你的程序时UNICODE就选择UNICODE,另存以后再读取。UTF-8的编码在VC里面无法正常显示。需要转换ANSI或...
  • 文件打开失败!");  exit(0);  }  while(1)  {<!-- -->  fscanf(fp, "%s %s %s\n", book1[i].name, book1[i].id, book1[i].score);  if(feof(fp)) ...
  • 有一天打开AS,不知道为什么AS上打开的项目文件都变成了乱码,但是我到AndroidStudioProjects文件夹查看我的源文件,代码又全都好好的 以为编码问题,但是我用txt打开源文件后发现仍然还是UTF-8,没有问题。 搜索...
  • 然后把buffer里的数据写到SD卡里,FAT文件系统我移植了官方的,串口能正常接收数据,也能写卡,但是我把SD卡插到电脑上查看写的结果时,显示乱码,请教各路大神,这是为什么?这我写的SD卡写文件函数: void ...
  • LinuxMint轻松解决TXT文本乱码问题

    千次阅读 2017-10-09 22:51:22
    很多 Linux 用户都会遇到打开 TXT 文本乱码问题,在打开 Windows 下制作的 TXT 文件时尤为常见。为什么会有乱码呢?简单地说,就是因为 Linux 采用的 UTF-8 编码,Windows 的中文编码 GB18030。 解决的办法有两...
  • ```txt文件内容这样的![图片说明](https://img-ask.csdn.net/upload/202006/02/1591097640_198797.png) 按这段代码输出的这样的![图片说明](https://img-ask.csdn.net/upload/202006/02/1591097707_8631.jpg)
  • 为什么txt打开是乱码呢?如果非要使用write函数,怎样才能使txt正常显示呢?他们说txt读写(其他形式)和打开(二进制)方式如果不一样,就不能正常显示正确结果。求大家解释。一直怀疑这里的wirte函数格式。
  • 文件打开与保存(C语言)

    千次阅读 2013-09-06 00:12:04
    最近在弄文件的传输,基本流程就是: ...为什么打开保存txt就可以,但是其他的文件就不行呢? FILE *pFile=fopen("D:\\111.doc","r");//之前的乱码系因为当j=lenFile的时候,*sendbuf='0',这样把s
  • "是乱码 w32dasm对于中文显示不是太好 毕竟不是国产软件 先把今天会用到的汇编基本指令跟大家解释一下 mov a,b ;把b的值赋给a,使a=b call :调用子程序 ,子程序以ret结 ret :返回主程序 je或jz :若...
  • 关于HANLP的乱码问题

    2017-06-06 19:42:33
    在利用HanLP进行分词的...于是我打开我的输入文件然后另存一遍,发现它默认的是ANSI格式的文档,怪不得读出来会是乱码。 后来我将文档另存,并更改utf-8的编码格式,再进行一遍分词操作,之前的问题就解决了。
  • java乱码问题

    2005-09-13 20:15:00
    这次基本上还算顺利,主要碰上了从文本文件中读取数据为乱码的问题。网上有很多这样的帖子,所以解决起来不是很费劲。String temp="";//从文件中读出的全部内容 //打开并读取文件 File resultfile=new File("parse...
  • 最简单的办法:直接用txt打开.h .cpp等文件,另存,编码格式选择UTF-8即可!默认情况下,代码文件应该以utf-8的格式来存储的。而如果在代码文件的转移或者上传下载过程中,弄乱了文件的编码格式,一般会出现乱码的...
  • 首先我先观察自己编译器IDEA的编码格式问题,从setting至othersetting等确认,确认自己确实全部设置为了utf-8的编码格式,于是确认保存的TXT文件的编码格式,确定utf8,文件写入流也utf8,那么问题来了,所有...
  • 用 export命令可以将数据库表导出成del,ixf, wsf 或者txt格式的文件: 具体语法:  export to d:\*.del of del select * ...这里先检查一下打开del文件的工具的默认字符集是什么,有可能工具的问题 如果不...
  • 文件操作

    2017-09-19 21:39:00
    f=open(...)由操作系统打开文件,那么如果我们没有open指定编码,那么打开文件的默认编码很明显操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下gbk,在linux下utf-8。 这就用到了上...
  • 文件在计算机中都是以二进制存储的,这个想必大家都是知道的,既然都是用0和1存储的,那为什么记事本能够打开一些所谓的“txt文件”,打开标准的“grd文件”时却会是乱码呢?这就是文件格式的问题了。计算机中的文件...
  • 我写了个代码,想要把文件里的东西输入到链表然后再打印到屏幕上,但是文件里的中文会是乱码的,为什么呢??? 代码如下: #include #include #include struct book { char INSB[20]; char book_...

空空如也

空空如也

1 2 3
收藏数 51
精华内容 20
关键字:

为什么txt文件打开是乱码