java上传文件到linux上 防止文件名中文乱码

在windows系统下 默认编码是GBK/GB2312的编码格式,linux上默认为utf-8的编码格式。

当我们在windows上上传文件的时候,JVM会根据本身的操作系统所默认的编码格式 编译成unicode字节数组,进行存储。

然后解析的时候也会根据本身的操作系统默认的编码格式进行解析。


上传文件中文乱码时:  JVM编译成gbk格式的unicode字节数组,然后解析成utf-8的格式,所以导致乱码。

乱码的本质是:   字符串原本的编码格式  和 读取解析的编码格式不一致  所造成的 。


在java中使用  new String(bytes,charset); 方法可以解决乱码问题。

 bytes :表示编译采用什么格式进行编译 ,charset : 表示使用什么格式进行解析


在windows上    如:

String str="我很帅哦";

System.out.println(new String(str.getBytes(),"gbk")); 是正确的

System.out.println(new String(str.getBytes("utf-8"),"utf-8"));  也是正确的

System.out.println(new String(str.getBytes("gbk"),"utf-8"));  是错误的 


那么 如何将GBK 转化成utf-8呢? (实际上是unicode转成utf-8)

byte[] utfbytes=str.getBytes("utf-8");

String strFinsh=new String (utfbytes,"utf-8");

简写:System.out.println(new String(str.getBytes("utf-8"),"utf-8"));  


utf-8转成gbk 也是一样的 

new String(str.getBytes("gbk"),"gbk");

 getBytes(charset)

在JDK中这样描述的:Encodes this String into a sequence of bytes using the named charset, storing the result into a new byte array.



### Java 上传文件至服务器 文件名乱码 解决方案 当遇到Java程序向服务器上传文件时出现中文文件名乱码的情况,可以通过调整编码方式来解决问题。对于FTP客户端上传文件过程中产生的乱码现象,一种有效的处理办法是在初始化`FtpClient`对象之后立即设定其控制连接使用的字符集为UTF-8[^1]。 ```java ftpClient.setControlEncoding("UTF-8"); ``` 针对Linux环境下创建或操作文件时发生的文件名乱码状况,除了上述措施外,还可以考虑通过修改JVM启动参数或者利用`System.setProperty()`函数指定系统的默认字符集为UTF-8,从而确保整个应用程序内部以及与外部交互的数据流都能保持一致的编码格式[^4]: ```java System.setProperty("sun.jnu.encoding", "UTF-8"); System.setProperty("file.encoding", "UTF-8"); ``` 另外,在构建URL路径字符串或将文件名传递给网络请求头字段的情况下,应当先对含有特殊字符(如汉字)的部分执行URLEncoder.encode()转换,再将其嵌入最终的目标地址之中;而对于HTTP响应头部中的Content-Disposition属性,则推荐采用如下所示的方式进行设置,以便兼容不同类型的浏览器并妥善处理包含空格在内的各种情况下的文件命名问题[^3]: ```java String fileName = URLEncoder.encode(originalFileName, "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment; filename=" + fileName); // 或者为了更好地支持IE和其他一些旧版浏览器 response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + originalFileName); ``` 最后值得注意的是,如果仅仅是本地磁盘I/O操作而非跨平台传输的话,那么单纯依靠改变写入模式(比如由`FileWriter`改为`FileOutputStream`)可能无法彻底根治因操作系统差异引发的编码不匹配难题,此时同样建议统一使用UTF-8作为工作环境内的标准文字表示法,并且注意检查源代码保存时所选用的文字编码选项是否正确无误[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值