linux写文件乱码_java在linux服务器中写文件,文件名乱码 - CSDN
  • 项目部署到liuux环境中,出现乱码的解决办法,实际遇到的问题
  • Linux 文件乱码

    千次阅读 2018-08-08 09:57:46
    其他文件打开能正常显示,某个文件出现乱码,可以应用底行模式键入 set fileencoding=utf-8 得以解决。

    其他文件打开能正常显示,某个文件出现乱码,可以应用底行模式键入 set fileencoding=utf-8 得以解决。

    展开全文
  • window系统一般文件名编码为... 那么在window上显示正常的文件linux上的时候,常常会因为中文问题导致乱码,比如文件名乱码文件内容乱码。 查看linux设置的编码: [root ~]# echo $LANG zh_CN.UTF-8 [root ...

           window系统一般文件名编码为gbk,文件内容编码这个需要通过编辑器查看或者设置,找个editplus文本编辑器就可以处理文本内容编码。

            那么在window上显示正常的文件到linux上的时候,常常会因为中文问题导致乱码,比如文件名乱码和文件内容乱码。

    查看linux设置的编码:

    [root ~]#  echo $LANG
    zh_CN.UTF-8
    [root ~]# locale
    LANG=zh_CN.UTF-8
    LC_CTYPE="zh_CN.UTF-8"
    LC_NUMERIC="zh_CN.UTF-8"
    LC_TIME="zh_CN.UTF-8"
    LC_COLLATE="zh_CN.UTF-8"
    LC_MONETARY="zh_CN.UTF-8"
    LC_MESSAGES="zh_CN.UTF-8"
    LC_PAPER="zh_CN.UTF-8"
    LC_NAME="zh_CN.UTF-8"
    LC_ADDRESS="zh_CN.UTF-8"
    LC_TELEPHONE="zh_CN.UTF-8"
    LC_MEASUREMENT="zh_CN.UTF-8"
    LC_IDENTIFICATION="zh_CN.UTF-8"

    LC_ALL=

    上门是基于centos6.5查询和设置,之前是设置USA.UTF-8,后面把它设置支持中文zh_CN.UTF-8,需要安装支持中文的包

    yum -y groupinstall chinese-support  

    修改和设置编码

    [root ~]# vim /etc/sysconfig/i18n
    LANG="zh_CN.UTF-8"

    [root ~]# source /etc/sysconfig/i18n

    经过上面的设置后,开始基于xftp和xshell做下面的实验。

    xshell在文件--》属性--》终端设置编码,xftp暂时不设置。

    一、linux文件名乱码。

    1、创建测试目录和测试文件,文件名带有中文字符,文件内容带有中文字符。通过xftp上传到linux服务器:

    在xftp里面显示中文一切正常。

    2、在linux下面显示发现文件名乱码。同时用file 文件名查看当前文件

    此时做一个转码操作:

    convmv --notest --nosmart -f gbk -t utf8 -r 文件或者目录

    -f from从什么编码
    -t to改成什么编码
    --nosmart 如果已经是utf-8 忽略
    -r 包含所有子目录

    --notest 不加表示只列出有什么需要转换的,不做实际转换,所以一定要加

    上面步骤已经搞定文件名乱码问题了,下面是通过设置xftp编码对应linux编码。

    3、xftp文件--》属性--》选项,设置为utf-8编码--文件名传输编码。这样显示的文件名就直接是uft-8编码,linux显示就不会是乱码。

    4、通过如上设置后,如果发现压缩包文件在服务器端解压后发现有乱码,那么先在window系统解压,然后整个目录传到服务器上,然后看看传上去的是否还是乱码,通过实践,发现中午可以正常的。

    二、文件内容乱码。

    1、用cat 查看发现内容乱码

    2、iconv -f gbk -t utf8 test测试.txt -o test测试.txt

    经过测试已经把文件乱码内容成功转码,

    同时iconv不做覆盖的时候另外一种写法iconv -f gbk -t utf8 haha.txt > haha.txt.utf8

    这种写法不能覆盖,原文件为空。

     

    3、另外一种就是平时写的sell脚本,在window那边传过来需要转码。

    安装:yum install -y dos2unix

    执行相关命令dos2unix  xxx.sh

     

                 上面两种解决方法基本上解决了window到linux文件名乱码和文件内容问题,后续遇到新的问题再追加进来。

     

    展开全文
  • 我们来看写文件时用到的XMLWriter,他提供以下几种构造方法: XMLWriter()  XMLWriter(OutputFormat format)  XMLWriter(OutputStream out)  XMLWriter(OutputStream out, OutputFormat format)  XML...
    我们来看写文件时用到的XMLWriter,他提供以下几种构造方法:
    XMLWriter() 
    XMLWriter(OutputFormat format) 
    XMLWriter(OutputStream out) 
    XMLWriter(OutputStream out, OutputFormat format) 
    XMLWriter(Writer writer) 
    XMLWriter(Writer writer, OutputFormat format) 

      最简单常用的可能是new XMLWriter(new FileWriter(...))这样的形式。可如果你一旦这么用,就会造成编码问题。由于dom4j对于文件编码的选择是才用java本身类的处理方式(可以从源码看到),这么写就是采用FileWriter的处理方式,而FileWriter是不提供对编码的处理的。于是会调用系统自身的编码,比如用中文操作系统,编码方式就是gbk,然后默认的,他赫然会在文件头写上<?xml version="1.0" encoding="UTF-8"?>。也就是说,他以当前操作系统的编码保存文件,并且竟然自动添加文件头为"utf-8"格式,这会导致很多程序无法读取正确编码,而且具有很差的移植性(比如在windows下开发,放到linux服务器下跑,毕竟一般linux服务器默认local都是utf-8)。
    解决途径一:使用new XMLWriter(new FileOutputStream(...))方法。这样做,因为dom4j默认使用utf-8编码,即xml文件头默认编码方式,并且内容也会使用utf-8保存,这样可以做到一致的编码,不会出问题。
    解决途径二:使用new XMLWriter(new FileOutputStream(...), outputFormat)的构造方法。
    OutputFormat xmlFormat = OutputFormat.createPrettyPrint();
    xmlFormat.setEncoding("utf-8");
    XmLWriter writer = new XMLWriter(new FileOutputStream(...), xmlFormat);
    writer.write(document);
    writer.close();
    如上,setEncoding可以设置存储的文件编码格式,createPrettyPrint是得到美化xml格式输出。这样的话,在不同的环境下可以获得同样的编码读写,并且真正保证了文件标称与实际编码的一致性。
    【注意】如果你使用OutputFormat是为了设置文件编码,那千万别用 XMLWriter(new FileWriter(...), outputFormat)构造方法,因为前面已经说了,FileWriter不会处理编码,所以即使你使用format.setEncoding("utf-8");他仍然不会使用utf-8编码,而只是把文件头指定为utf-8,这类似不使用outputFormat的情况。而网上好多人举例用了XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);那是因为他们format.setEncoding("gbk");而windows默认就是gbk,这当然使实际编码与标称的配套了。但实际上,这种方法是不正确的,java并没有按你写的"gbk"进行编码,而是使用了系统默认编码而已,放到linux就会出现错误,所以一定的小心。
     把编码交给操作系统来控制一向是罪恶的,包括java其他地方的参数传递等,如request的参数传递,其他文件读写,如果不使用编码过滤器,不进行编码指定,可能使得整个系统失去移植性,并产生完全不可预期的错误。找起来头大不说,有时候看到encoding="UTF-8",实际上却是gkb编码会让你错过关键调试点。
    还有就是记事本的罪恶性,用记事本打开不同编码的文件,往往得不到预期的效果,而且你无从得知他到底是用何种编码打开,一般使用EditPlus指定编码打开会好很多。
    希望对你有帮助!
    展开全文
  • =======================================================================================================...linux系统下文件写入,读取出现乱码原因  前一段时间做好了FL2440开发板eeprom的驱动,今天在编写往eep

    ===================================================================================================================================

    linux系统下文件写入,读取出现乱码原因

            前一段时间做好了FL2440开发板eeprom的驱动,今天在编写往eeprom中读写的测试程序,可以往里面写入,但是在读出来的时候会出现乱码问题


    有问题的代码

    #include <stdio.h>
    #include <string.h>
    #include <sys/ioctl.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #include <sys/io.h>
    #include <getopt.h>
    
    
    /********************************************************************************
     *  Description:
     *   Input Args:
     *  Output Args:
     * Return Value:
     ********************************************************************************/
    int main (int argc, char **argv)
    {
        int fd, ret, opt;
        char a_data[5];
        fd = open("/sys/devices/platform/s3c2440-i2c/i2c-0/0-0050/eeprom",O_RDWR);
        while((opt=getopt(argc,argv,"rw:"))!=-1)
        {
            switch(opt)
            {
                case 'r':
                    lseek(fd,0,SEEK_SET);
                    ret = read(fd,a_data,5);
                    printf("the information we read from eeprom is %s !\n",a_data);
                    break;
                case 'w':
                    strcpy(a_data,optarg);
                    lseek(fd,0,SEEK_SET);
                    ret = write(fd,a_data,5);
                    break;
            }
        }
    
        return 0;
    } /* ----- End of main() ----- */
    

    有问题的结果:

    >:./write -w 12345
    >:./write -r
    the information we read from eeprom is 12345 @
    >:./write -r
    the information we read from eeprom is 12345?@


    ****************************************************************************************************************

    出现问题的原因:

    1.是没有将读的缓存a_data先memset设置为0

    2.在字符串的输出时以“\0”为结束标志的,我在字符串里面装5个字符,就要申请6个字符的空间,最后一个放置“\0”

    ****************************************************************************************************************

    修改之后的程序

    #include <stdio.h>
    #include <string.h>
    #include <sys/ioctl.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #include <sys/io.h>
    #include <getopt.h>
    #include <memory.h>
    
    
    /********************************************************************************
     *  Description:
     *   Input Args:
     *  Output Args:
     * Return Value:
     ********************************************************************************/
    int main (int argc, char **argv)
    {
        int fd, ret, opt;
        char a_data[6];
        memset(a_data,0,6);
        fd = open("/sys/devices/platform/s3c2440-i2c/i2c-0/0-0050/eeprom",O_RDWR);
        while((opt=getopt(argc,argv,"rw:"))!=-1)
        {
            switch(opt)
            {
                case 'r':
                    lseek(fd,0,SEEK_SET);
                    ret = read(fd,a_data,5);
                    printf("the information we read from eeprom is %s !\n",a_data);
                    break;
                case 'w':
                    strcpy(a_data,optarg);
                    lseek(fd,0,SEEK_SET);
                    ret = write(fd,a_data,5);
                    break;
            }
        }
    
        return 0;
    } /* ----- End of main() ----- */
    


    测试的结果:

    >:./write -w 12345
    >:./write -r
    the information we read from eeprom is 12345 !

    展开全文
  • linux下fprintf写入文件乱码

    千次阅读 2018-09-20 21:27:35
    笔者最近经常在linux下运行一些C++程序,每次用fprintf将string类型的结果写入文件时,编译以后总会出现  警告:cannot pass objects of non-POD type ‘const struct std::basic_string&lt;char, std::char_...
  • java io写文件linux出现中文乱码

    千次阅读 2009-09-01 13:16:00
    java io写文件文件的中文都成乱码,在windows是没问题的,主要是linux下默认字符集是utf-8,而windows默认编码是gbk,所以java 往文件里面写入中文时是根据系统默认字符集来的。可以有两种方法,1.在java io...
  • 文件 乱码解决 new OutputStreamWriter(new FileOutputStream(filename),"GB2312"); 读文件乱码解决 public String readInput(String filePath, String fileName) throws IOException { StringBuff
  • linux下删除乱码文件

    千次阅读 2016-09-01 11:15:08
    linux下删除乱码文件
  • Linux下对文件操作经常会遇见乱码问题,我在网上搜了一些解决方法,希望能对大家有所帮助。如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312...
  • Linux删除乱码文件

    千次阅读 2020-05-14 11:32:36
    因为解压出了问题解压出的文件都是乱码文件,用rm -fr无法删除,可以使用以下命令删除乱码文件 1.列出文件的节点号 ls -i 2.删除文件 find . -inum 查出的节点号 -exec rm {} -rf ; ...
  • 程序输入之后,记事本只显示name、addr,而int型数据均为乱码,请问如何解决这一问题?? #include #define SIZE 3 struct Student_type { char name[10]; int num; int age; char addr[15]; }stud[SIZE]; ...
  • Linux显示在Windows编辑过的...因此,解决Linux打开txt文件中文乱码可有如下两种方法。 方法一: 在附件终端中,进入到txt文件所在目录,使用命令符“iconv -f gb18030 -t utf8 old.txt -o new.txt”把gb18030编码的...
  • 昨天用java io个系统的操作日志进txt文件时,遇到这么个问题:在windows系统上测试过了,是没问题的,但是放到服务器(linux系统)上文件的中文都变成了乱码!究其原因,原来是这么个情况:linux下默认字符集是...
  • 之前从Windows上传文件Linux服务器中,文本文件中出现了中文乱码 Linux服务器文件内容乱码如下: 使用下面的方法解决: 1.首先是否安装convmv: rpm -qa |grep convmv 2.如果没有安装则进行安装: yum -y ...
  • linux cat 文件乱码

    千次阅读 2017-11-27 20:36:28
    test.log是utf-16的编码 cat test.log会报错 但是我们可以cat的时候指定编码格式 iconv -f 文件编码 -t 终端编码 input.log iconv -f utf-16 -t utf-8 test.log
  • linux文件乱码问题及编码方式

    千次阅读 2016-11-21 23:50:15
    Linux下对文件操作经常会遇见乱码问题,我在网上搜了一些解决方法,希望能对大家有所帮助。 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb...
  • Linux服务器生成文件名称乱码问题

    千次阅读 2018-03-08 11:45:24
    因为生成的文件夹和文件名必须是中文的,我在windows本地测试的时候发现出现乱码‘绀轰緥...把代码更到Linux服务器的出现下载文件出现文件找不到问题,但是确实是生成文件了,然后我就进到相应目录看发现又变成乱码...
  • 后台根据文件名在linux的预设的路径下创建文件 新建文件输出流,将文件内容输出到新建的文件下 错误:文件内容无误,但是文件名乱码,导致无法后续读取上传的文件 分析: 第一次只修改了代码中文件名的编码,没用...
  • 上传文件内容如果有中文字体,需要提前将文件内容保存为utf8格式的文件,再进行上传,可防止文件内容乱码问题。    源码安装:https://www.ohse.de/uwe/software/lrzsz.html  安装方法: 下载 lrzsz-***....
1 2 3 4 5 ... 20
收藏数 70,291
精华内容 28,116
关键字:

linux写文件乱码