记一次Docker容器中写出文件编码错误

时间:2018-7-31
现象:项目在本地启动下载文件压缩后,没有出现乱码问题,但在docker容器中部署项目后,写出文件压缩后中文乱码
解决过程: 首先在代码中尝试了多种写出方法。因为有文件需要压缩,使用最java自带工具类java.util.zip,出现了乱码(乱码为???)。此时想到的肯定是自己java编码压缩有问题,然后又换成了org.apache.tools.zip还是乱码,那我就想了啊,是不是在压缩前生成文件时就乱码了呢?
一看文件果然是输出文件时文件名就已经乱码了,此时想到的就是Java 的系统属性 sun.jnu.encoding 的编码问题,然后在系统中打印出来,如图,系统编码为ANSI_X3.4-1968,

顿时感觉问题有希望解决了,在输出文件之前添加了System.setProperty("sun.jnu.encoding","utf-8");此时再打印出来

 虽然已经改成了utf-8但是文件输出的还是乱码,这时候真的很尴尬了,试过很多方法从代码下手试过很多方法依旧不行,此时心里严重怀疑是机器问题,上网查询了一下关于docker编码的问题,发现大家的却经常碰到docker中文编码错误,想去找dockerfile文件看一下,然而怎么找都找不到,问管服务器的人,那人也不吊我,实在没办法硬着头皮让那人换了一个docker镜像(换的这个dokcer镜像是其他项目使用的,文件写出没有问题),然后!然后就好了!此时再去看看java的系统变量编码sun.jnu.encoding就成了utf-8。
 果然还是系统编码问题,大家以后还是要相信自己的判断啊!当然前提是要从自身开始找问题,若尝试过各种方法还是不行,就要换一个思路去解决了!不能走进死胡同!
附文件压缩代码:
package test;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipTest1 {
    public static void main(String[] args){
        String sysDir = System.getProperty("user.home")+"/测试文件夹";
        System.out.println(sysDir);
        String txtFileName = new String("测试文本.txt");
        String txtContent = new String("测试文本内容");
System.out.println("sun.jnu.encoding"+System.getProperty("sun.jnu.encoding"));
        File fileDir = new File(sysDir);
        if(!fileDir.exists()){
            fileDir.mkdirs();
        }
        try {
            OutputStreamWriter oStreamWriter = new OutputStreamWriter(new FileOutputStream(sysDir+File.separator+txtFileName), "utf-8");
            oStreamWriter.append(txtContent);
            oStreamWriter.flush();
            oStreamWriter.close();
        }catch (IOException e){
            e.printStackTrace();
        }

        try {
            //压缩文件夹以及文件内容
            FileOutputStream fos = new FileOutputStream(new File(sysDir + ".zip"));
            ZipOutputStream zos = new ZipOutputStream(fos);
            compressbyType(fileDir,zos,"" );
            //记得关闭输出流
            zos.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    private static void compressbyType(File src, ZipOutputStream zos, String zipDir) {

        if (!src.exists())
            return;
        System.out.println("压缩路径" + zipDir + src.getName());
        //判断文件是否是文件,如果是文件调用compressFile方法,如果是路径,则调用compressDir方法;
        if (src.isFile()) {
            //src是文件,调用此方法
            compressFile(src, zos, zipDir);
        } else if (src.isDirectory()) {
            //sr是文件夹,调用此方法
            compressDir(src, zos, zipDir);
        }

    }

    private static void compressFile(File file, ZipOutputStream zos,String zipDir) {

//        String systemEncoding = System.getProperty("file.encoding");
        if (!file.exists())
            return;
        try {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
//            ZipEntry entry = new ZipEntry(baseDir + new String(file.getName().getBytes(systemEncoding),"UTF-8"));
            ZipEntry entry = new ZipEntry(zipDir+file.getName());
            zos.putNextEntry(entry);
            int count;
            byte[] buf = new byte[1024];
            while ((count = bis.read(buf)) != -1) {
                zos.write(buf, 0, count);
            }
            bis.close();

        } catch (Exception e) {
            // TODO: handle exception

        }
    }

    private static void compressDir(File dir, ZipOutputStream zos,String zipDir) {
        if (!dir.exists())
            return;
        File[] files = dir.listFiles();
        if(files.length == 0){
            try {
                zos.putNextEntry(new ZipEntry(zipDir + dir.getName()+File.separator));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        for (File file : files) {
            compressbyType(file, zos, zipDir + dir.getName() + File.separator);
        }
    }
}
 
<!--5f39ae17-8c62-4a45-bc43-b32064c9388a:W3siYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7ImFsaWduIjoibGVmdCIsImluZGVudCI6MCwidGV4dC1pbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1fSwiYmxvY2tJZCI6IjU5OTctMTUzMzAwOTcxNDAyOSIsInJpY2hUZXh0Ijp7ImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWUsImRhdGEiOlt7ImNoYXIiOiLnjrAifSx7ImNoYXIiOiLosaEifSx7ImNoYXIiOiLvvJoifSx7ImNoYXIiOiLpobkifSx7ImNoYXIiOiLnm64ifSx7ImNoYXIiOiLlnKgifSx7ImNoYXIiOiLmnKwifSx7ImNoYXIiOiLlnLAifSx7ImNoYXIiOiLlkK8ifSx7ImNoYXIiOiLliqgifSx7ImNoYXIiOiLkuIsifSx7ImNoYXIiOiLovb0ifSx7ImNoYXIiOiLmlocifSx7ImNoYXIiOiLku7YifSx7ImNoYXIiOiLljosifSx7ImNoYXIiOiLnvKkifSx7ImNoYXIiOiLlkI4ifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLmsqEifSx7ImNoYXIiOiLmnIkifSx7ImNoYXIiOiLlh7oifSx7ImNoYXIiOiLnjrAifSx7ImNoYXIiOiLkubEifSx7ImNoYXIiOiLnoIEifSx7ImNoYXIiOiLpl64ifSx7ImNoYXIiOiLpopgifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLkvYYifSx7ImNoYXIiOiLlnKgifSx7ImNoYXIiOiJkIn0seyJjaGFyIjoibyJ9LHsiY2hhciI6ImMifSx7ImNoYXIiOiJrIn0seyJjaGFyIjoiZSJ9LHsiY2hhciI6InIifSx7ImNoYXIiOiLlrrkifSx7ImNoYXIiOiLlmagifSx7ImNoYXIiOiLkuK0ifSx7ImNoYXIiOiLpg6gifSx7ImNoYXIiOiLnvbIifSx7ImNoYXIiOiLpobkifSx7ImNoYXIiOiLnm64ifSx7ImNoYXIiOiLlkI4ifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLlhpkifSx7ImNoYXIiOiLlh7oifSx7ImNoYXIiOiLmlocifSx7ImNoYXIiOiLku7YifSx7ImNoYXIiOiLljosifSx7ImNoYXIiOiLnvKkifSx7ImNoYXIiOiLlkI4ifSx7ImNoYXIiOiLkuK0ifSx7ImNoYXIiOiLmlocifSx7ImNoYXIiOiLkubEifSx7ImNoYXIiOiLnoIEifV19fSx7ImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NX0sImJsb2NrSWQiOiI5NTIxLTE1MzMwMDk3MzU1MDMiLCJyaWNoVGV4dCI6eyJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlLCJkYXRhIjpbeyJjaGFyIjoi6KejIn0seyJjaGFyIjoi5YazIn0seyJjaGFyIjoi6L+HIn0seyJjaGFyIjoi56iLIn0seyJjaGFyIjoiOiJ9LHsiY2hhciI6IiAifSx7ImNoYXIiOiLpppYifSx7ImNoYXIiOiLlhYgifSx7ImNoYXIiOiLlnKgifSx7ImNoYXIiOiLku6MifSx7ImNoYXIiOiLnoIEifSx7ImNoYXIiOiLkuK0ifSx7ImNoYXIiOiLlsJ0ifSx7ImNoYXIiOiLor5UifSx7ImNoYXIiOiLkuoYifSx7ImNoYXIiOiLlpJoifSx7ImNoYXIiOiLnp40ifSx7ImNoYXIiOiLlhpkifSx7ImNoYXIiOiLlh7oifSx7ImNoYXIiOiLmlrkifSx7ImNoYXIiOiLms5UifSx7ImNoYXIiOiLjgIIifSx7ImNoYXIiOiLlm6AifSx7ImNoYXIiOiLkuLoifSx7ImNoYXIiOiLmnIkifSx7ImNoYXIiOiLmlocifSx7ImNoYXIiOiLku7YifSx7ImNoYXIiOiLpnIAifSx7ImNoYXIiOiLopoEifSx7ImNoYXIiOiLljosifSx7ImNoYXIiOiLnvKkifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLkvb8ifSx7ImNoYXIiOiLnlKgifSx7ImNoYXIiOiLmnIAifSx7ImNoYXIiOiJqIn0seyJjaGFyIjoiYSJ9LHsiY2hhciI6InYifSx7ImNoYXIiOiJhIn0seyJjaGFyIjoi6IeqIn0seyJjaGFyIjoi5bimIn0seyJjaGFyIjoi5belIn0seyJjaGFyIjoi5YW3In0seyJjaGFyIjoi57G7In0seyJjaGFyIjoiaiJ9LHsiY2hhciI6ImEifSx7ImNoYXIiOiJ2In0seyJjaGFyIjoiYSJ9LHsiY2hhciI6Ii4ifSx7ImNoYXIiOiJ1In0seyJjaGFyIjoidCJ9LHsiY2hhciI6ImkifSx7ImNoYXIiOiJsIn0seyJjaGFyIjoiLiJ9LHsiY2hhciI6InoifSx7ImNoYXIiOiJpIn0seyJjaGFyIjoicCJ9LHsiY2hhciI6IiwifSx7ImNoYXIiOiLlh7oifSx7ImNoYXIiOiLnjrAifSx7ImNoYXIiOiLkuoYifSx7ImNoYXIiOiLkubEifSx7ImNoYXIiOiLnoIEifSx7ImNoYXIiOiLvvIgifSx7ImNoYXIiOiLkubEifSx7ImNoYXIiOiLnoIEifSx7ImNoYXIiOiLkuLoifSx7ImNoYXIiOiLvvJ8ifSx7ImNoYXIiOiLvvJ8ifSx7ImNoYXIiOiLvvJ8ifSx7ImNoYXIiOiLvvIkifSx7ImNoYXIiOiLjgIIifSx7ImNoYXIiOiLmraQifSx7ImNoYXIiOiLml7YifSx7ImNoYXIiOiLmg7MifSx7ImNoYXIiOiLliLAifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLogq8ifSx7ImNoYXIiOiLlrpoifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLoh6oifSx7ImNoYXIiOiLlt7EifSx7ImNoYXIiOiJqIn0seyJjaGFyIjoiYSJ9LHsiY2hhciI6InYifSx7ImNoYXIiOiJhIn0seyJjaGFyIjoi57yWIn0seyJjaGFyIjoi56CBIn0seyJjaGFyIjoi5Y6LIn0seyJjaGFyIjoi57ypIn0seyJjaGFyIjoi5pyJIn0seyJjaGFyIjoi6ZeuIn0seyJjaGFyIjoi6aKYIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi54S2In0seyJjaGFyIjoi5ZCOIn0seyJjaGFyIjoi5Y+IIn0seyJjaGFyIjoi5o2iIn0seyJjaGFyIjoi5oiQIn0seyJjaGFyIjoi5LqGIn0seyJjaGFyIjoibyJ9LHsiY2hhciI6InIifSx7ImNoYXIiOiJnIn0seyJjaGFyIjoiLiJ9LHsiY2hhciI6ImEifSx7ImNoYXIiOiJwIn0seyJjaGFyIjoiYSJ9LHsiY2hhciI6ImMifSx7ImNoYXIiOiJoIn0seyJjaGFyIjoiZSJ9LHsiY2hhciI6Ii4ifSx7ImNoYXIiOiJ0In0seyJjaGFyIjoibyJ9LHsiY2hhciI6Im8ifSx7ImNoYXIiOiJsIn0seyJjaGFyIjoicyJ9LHsiY2hhciI6Ii4ifSx7ImNoYXIiOiJ6In0seyJjaGFyIjoiaSJ9LHsiY2hhciI6InAifSx7ImNoYXIiOiLov5gifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLkubEifSx7ImNoYXIiOiLnoIEifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLpgqMifSx7ImNoYXIiOiLmiJEifSx7ImNoYXIiOiLlsLEifSx7ImNoYXIiOiLmg7MifSx7ImNoYXIiOiLkuoYifSx7ImNoYXIiOiLllYoifSx7ImNoYXIiOiLvvIwifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLkuI0ifSx7ImNoYXIiOiLmmK8ifSx7ImNoYXIiOiLlnKgifSx7ImNoYXIiOiLljosifSx7ImNoYXIiOiLnvKkifSx7ImNoYXIiOiLliY0ifSx7ImNoYXIiOiLnlJ8ifSx7ImNoYXIiOiLmiJAifSx7ImNoYXIiOiLmlocifSx7ImNoYXIiOiLku7YifSx7ImNoYXIiOiLml7YifSx7ImNoYXIiOiLlsLEifSx7ImNoYXIiOiLkubEifSx7ImNoYXIiOiLnoIEifSx7ImNoYXIiOiLkuoYifSx7ImNoYXIiOiLlkaIifSx7ImNoYXIiOiLvvJ8ifV19fSx7ImJsb2NrVHlwZSI6InBhcmFncmFwaCIsInN0eWxlcyI6eyJhbGlnbiI6ImxlZnQiLCJpbmRlbnQiOjAsInRleHQtaW5kZW50IjowLCJsaW5lLWhlaWdodCI6MS43NX0sImJsb2NrSWQiOiI1NDMwLTE1MzMwMzU1NDgzOTgiLCJyaWNoVGV4dCI6eyJpc1JpY2hUZXh0Ijp0cnVlLCJrZWVwTGluZUJyZWFrIjp0cnVlLCJkYXRhIjpbeyJjaGFyIjoi5LiAIn0seyJjaGFyIjoi55yLIn0seyJjaGFyIjoi5paHIn0seyJjaGFyIjoi5Lu2In0seyJjaGFyIjoi5p6cIn0seyJjaGFyIjoi54S2In0seyJjaGFyIjoi5pivIn0seyJjaGFyIjoi6L6TIn0seyJjaGFyIjoi5Ye6In0seyJjaGFyIjoi5paHIn0seyJjaGFyIjoi5Lu2In0seyJjaGFyIjoi5pe2In0seyJjaGFyIjoi5paHIn0seyJjaGFyIjoi5Lu2In0seyJjaGFyIjoi5ZCNIn0seyJjaGFyIjoi5bCxIn0seyJjaGFyIjoi5beyIn0seyJjaGFyIjoi57uPIn0seyJjaGFyIjoi5LmxIn0seyJjaGFyIjoi56CBIn0seyJjaGFyIjoi5LqGIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5q2kIn0seyJjaGFyIjoi5pe2In0seyJjaGFyIjoi5oOzIn0seyJjaGFyIjoi5YiwIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi5bCxIn0seyJjaGFyIjoi5pivIn0seyJjaGFyIjoiSiJ9LHsiY2hhciI6ImEifSx7ImNoYXIiOiJ2In0seyJjaGFyIjoiYSJ9LHsiY2hhciI6IiAifSx7ImNoYXIiOiLnmoQifSx7ImNoYXIiOiLns7sifSx7ImNoYXIiOiLnu58ifSx7ImNoYXIiOiLlsZ4ifSx7ImNoYXIiOiLmgKcifSx7ImNoYXIiOiIgIn0seyJjaGFyIjoicyJ9LHsiY2hhciI6InUifSx7ImNoYXIiOiJuIn0seyJjaGFyIjoiLiJ9LHsiY2hhciI6ImoifSx7ImNoYXIiOiJuIn0seyJjaGFyIjoidSJ9LHsiY2hhciI6Ii4ifSx7ImNoYXIiOiJlIn0seyJjaGFyIjoibiJ9LHsiY2hhciI6ImMifSx7ImNoYXIiOiJvIn0seyJjaGFyIjoiZCJ9LHsiY2hhciI6ImkifSx7ImNoYXIiOiJuIn0seyJjaGFyIjoiZyJ9LHsiY2hhciI6IsKgIn0seyJjaGFyIjoi55qEIn0seyJjaGFyIjoi57yWIn0seyJjaGFyIjoi56CBIn0seyJjaGFyIjoi6ZeuIn0seyJjaGFyIjoi6aKYIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi54S2In0seyJjaGFyIjoi5ZCOIn0seyJjaGFyIjoi5ZyoIn0seyJjaGFyIjoi57O7In0seyJjaGFyIjoi57ufIn0seyJjaGFyIjoi5LitIn0seyJjaGFyIjoi5omTIn0seyJjaGFyIjoi5Y2wIn0seyJjaGFyIjoi5Ye6In0seyJjaGFyIjoi5p2lIn0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi5aaCIn0seyJjaGFyIjoi5Zu+In0seyJjaGFyIjoi77yMIn0seyJjaGFyIjoi57O7In0seyJjaGFyIjoi57ufIn0seyJjaGFyIjoi57yWIn0seyJjaGFyIjoi56CBIn0seyJjaGFyIjoi5Li6In0seyJjaGFyIjoiQSJ9LHsiY2hhciI6Ik4ifSx7ImNoYXIiOiJTIn0seyJjaGFyIjoiSSJ9LHsiY2hhciI6Il8ifSx7ImNoYXIiOiJYIn0seyJjaGFyIjoiMyJ9LHsiY2hhciI6Ii4ifSx7ImNoYXIiOiI0In0seyJjaGFyIjoiLSJ9LHsiY2hhciI6IjEifSx7ImNoYXIiOiI5In0seyJjaGFyIjoiNiJ9LHsiY2hhciI6IjgifSx7ImNoYXIiOiIsIn0seyJjaGFyIjoi6aG/In0seyJjaGFyIjoi5pe2In0seyJjaGFyIjoi5oSfIn0seyJjaGFyIjoi6KeJIn0seyJjaGFyIjoi6ZeuIn0seyJjaGFyIjoi6aKYIn0seyJjaGFyIjoi5pyJIn0seyJjaGFyIjoi5biMIn0seyJjaGFyIjoi5pybIn0seyJjaGFyIjoi6KejIn0seyJjaGFyIjoi5YazIn0seyJjaGFyIjoi5LqGIn0seyJjaGFyIjoiLCJ9LHsiY2hhciI6IuWcqCJ9LHsiY2hhciI6Iui+kyJ9LHsiY2hhciI6IuWHuiJ9LHsiY2hhciI6IuaWhyJ9LHsiY2hhciI6IuS7tiJ9LHsiY2hhciI6IuS5iyJ9LHsiY2hhciI6IuWJjSJ9LHsiY2hhciI6Iua3uyJ9LHsiY2hhciI6IuWKoCJ9LHsiY2hhciI6IuS6hiJ9LHsiY2hhciI6IlMifSx7ImNoYXIiOiJ5In0seyJjaGFyIjoicyJ9LHsiY2hhciI6InQifSx7ImNoYXIiOiJlIn0seyJjaGFyIjoibSJ9LHsiY2hhciI6Ii4ifSx7ImNoYXIiOiJzIn0seyJjaGFyIjoiZSJ9LHsiY2hhciI6InQifSx7ImNoYXIiOiJQIn0seyJjaGFyIjoiciJ9LHsiY2hhciI6Im8ifSx7ImNoYXIiOiJwIn0seyJjaGFyIjoiZSJ9LHsiY2hhciI6InIifSx7ImNoYXIiOiJ0In0seyJjaGFyIjoieSJ9LHsiY2hhciI6IigifSx7ImNoYXIiOiJcIiJ9LHsiY2hhciI6InMifSx7ImNoYXIiOiJ1In0seyJjaGFyIjoibiJ9LHsiY2hhciI6Ii4ifSx7ImNoYXIiOiJqIn0seyJjaGFyIjoibiJ9LHsiY2hhciI6InUifSx7ImNoYXIiOiIuIn0seyJjaGFyIjoiZSJ9LHsiY2hhciI6Im4ifSx7ImNoYXIiOiJjIn0seyJjaGFyIjoibyJ9LHsiY2hhciI6ImQifSx7ImNoYXIiOiJpIn0seyJjaGFyIjoibiJ9LHsiY2hhciI6ImcifSx7ImNoYXIiOiJcIiJ9LHsiY2hhciI6IiwifSx7ImNoYXIiOiJcIiJ9LHsiY2hhciI6InUifSx7ImNoYXIiOiJ0In0seyJjaGFyIjoiZiJ9LHsiY2hhciI6Ii0ifSx7ImNoYXIiOiI4In0seyJjaGFyIjoiXCIifSx7ImNoYXIiOiIpIn0seyJjaGFyIjoiOyJ9XX19LHsiYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7ImFsaWduIjoibGVmdCIsImluZGVudCI6MCwidGV4dC1pbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1fSwiYmxvY2tJZCI6IjcyMjUtMTUzMzAzNTkwNDExMiIsInJpY2hUZXh0Ijp7ImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWUsImRhdGEiOlt7ImNoYXIiOiLmraQifSx7ImNoYXIiOiLml7YifSx7ImNoYXIiOiLlho0ifSx7ImNoYXIiOiLmiZMifSx7ImNoYXIiOiLljbAifSx7ImNoYXIiOiLlh7oifSx7ImNoYXIiOiLmnaUifV19fV0=-->
<!--5f39ae17-8c62-4a45-bc43-b32064c9388a:W3siYmxvY2tUeXBlIjoicGFyYWdyYXBoIiwic3R5bGVzIjp7ImFsaWduIjoibGVmdCIsImluZGVudCI6MCwidGV4dC1pbmRlbnQiOjAsImxpbmUtaGVpZ2h0IjoxLjc1fSwiYmxvY2tJZCI6IjQ2NjUtMTUzMzAwODc3NjgwMCIsInJpY2hUZXh0Ijp7ImlzUmljaFRleHQiOnRydWUsImtlZXBMaW5lQnJlYWsiOnRydWUsImRhdGEiOlt7ImNoYXIiOiLml7YifSx7ImNoYXIiOiLpl7QifSx7ImNoYXIiOiLvvJoifSx7ImNoYXIiOiIyIn0seyJjaGFyIjoiMCJ9LHsiY2hhciI6IjEifSx7ImNoYXIiOiI4In0seyJjaGFyIjoiLSJ9LHsiY2hhciI6IjcifSx7ImNoYXIiOiItIn0seyJjaGFyIjoiMyJ9LHsiY2hhciI6IjEifV19fV0=-->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值