C#文件上传编码乱码
又遇到文件编码乱码的事情,这回稍微有些头绪,但是还是花了很多时间去解决。
场景:上传csv文件,导入到数据库。上传文件的编码不定,需要转成unicode存储。
问题点:需要解决判断上传文件的编码。
关于编码,网上已有很多博客解释,只需查询关键字 unicode ansi bom 等
下面贴一个.net 官方的一些编码类型 地址:https://msdn.microsoft.com/zh-cn/library/windows/desktop/dd317756(v=vs.85).aspx
我这边主要是判断中文编码和unicode的一系列编码。在使用GB2312时发现该编码方式不存在,需要导入编码包:System.Text.Encoding.CodePages
并在使用该编码前添加一行
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
之后即可使用,使用方式如下:
Encoding.GetEncoding("GB2312")
根据网上一个高分根据bom判断编码方式(GB2312无法根据bom判断,且我的案例中只需判断unicode和GB2312,因此修改了方法,default返回GB2312)
/// <summary>
/// 获取文件编码方式
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public static Encoding GetEncoding(string filename)
{
// Read the BOM
var bom = new byte[];
using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
file.Read(bom, , );
} // Analyze the BOM
if (bom[] == 0x2b && bom[] == 0x2f && bom[] == 0x76) return Encoding.UTF7;
if (bom[] == 0xef && bom[] == 0xbb && bom[] == 0xbf) return Encoding.UTF8;
if (bom[] == 0xff && bom[] == 0xfe) return Encoding.Unicode; //UTF-16LE
if (bom[] == 0xfe && bom[] == 0xff) return Encoding.BigEndianUnicode; //UTF-16BE
if (bom[] == && bom[] == && bom[] == 0xfe && bom[] == 0xff) return Encoding.UTF32;
return Encoding.GetEncoding("GB2312");
}
另外,在上传的文件是根据这个编码方式,读入文件流,而.net内部本身就是unicode编码,可以直接存储使用。
var encoding = GetEncoding(filePath);
using (var sr = new StreamReader(file.OpenReadStream(), encoding, true)) //此处必须设置为true,用于设置自动察觉bom
{
using (var sw = new StreamWriter(filePath))
{
await sw.WriteAsync(sr.ReadToEnd()).ConfigureAwait(false);
}
8 }
关于这个自动察觉bom,借鉴博客https://www.mgenware.com/blog/?p=175
C#文件上传编码乱码的更多相关文章
- 【java】[文件上传jar包]commons-fileUpload组件解决文件上传(文件名)乱码问题
response.setContentType("text/html; charset=UTF-8"); Boolean isMultipart = ServletFileUpl ...
- 表单文件上传编码方式(enctype 属性)
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码. 如下: <form action="upload.php" method="post&quo ...
- Spring MVC—拦截器,文件上传,中文乱码处理,Rest风格,异常处理机制
拦截器 文件上传 -中文乱码解决 rest风格 异常处理机制 拦截器 Spring MVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerI ...
- 表单同时有中文字段和文件上传,加上enctype="multipart/form-data"后导致的中文乱码问题
因为一个表单需要同时上传字段和文件,所以加上enctype="multipart/form-data",但是上传后的中文字段变成了乱码. 把enctype="multip ...
- Ubuntu本地文件上传至HDFS文件系统出现的乱码问题及解决方案
1.问题来源及原因 用shell命令上传到HDFS中之后出现中文乱码,在shell命令窗口查看如图: 在eclipse中的文件HDFS查看工具查看如图: 原因:上传至HDFS文件系统的文本文件(这里是 ...
- 巧用 Jersey RESTful WebService框架解决文件上传乱码
一.当我们使用jersey框架封装的restful进行文件上传时,会出现中文乱码,试用了过滤器设置编码都不管用.仔细想了很久解决办法,就用一个servelt来代替这个上传的restful接口实现上传的 ...
- 中文名文件上传到linux服务器上以后文件名会乱码(openoffice)
1.中文名文件上传后保存在linux服务器上文件名会乱码,但是我们通过SSH直接对服务器上的一个文件进行重命名是可以使用中文的,而且显示出来是正确的,这说明服务器是可以支持中文的. 2.而为什么上传的 ...
- jm解决乱码问题-参数化-数据库操作-文件上传下载
jm解决乱码问题-参数化-数据库操作-文件上传下载 如果JM出果运行结果是乱码(解决中文BODY乱码的问题) 找到JM的安装路径,例如:C:\apache-jmeter-3.1\bin 用UE打开jm ...
- HttpClient多文件上传代码及普通参数中文乱码问题解决
该随笔记录了在实际项目中使用HttpClient调用外部api,需上传文件和普通参数的代码. 笔者在使用 HttpClient 调用 http api 接口时,需要服务端上传文件和一些普通参数给 ht ...
随机推荐
- [GO]匿名字段
package main import ( "fmt" ) type Person struct { name string sex byte age int } type Stu ...
- 六)iframe 及父子页面之间获取元素、方法调用
http://www.w3school.com.cn/tags/tag_iframe.asp father.html <!DOCTYPE html> <html> <he ...
- 一款基于uploadify扩展的多文件上传插件,完全适用于Html5
http://www.uploadify.com/documentation/ 官网里面有两个插件,一个是要使用flash插件才能文件上传的插件,另外一个是不需要使用要flash插件的文件上传插件完 ...
- 团体程序设计天梯赛L2-009 抢红包 2017-03-22 19:18 131人阅读 评论(0) 收藏
L2-009. 抢红包 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 没有人没抢过红包吧-- 这里给出N个人之间互相发红包.抢 ...
- logback-spring.xml配置文件详解
logback-spring.xml配置文件 自己改下value="G:/logs/pmp"这个值,如果你相关依赖弄好的话,直接复制粘贴即用 输出的日志文件的名称最好也改下,下文中 ...
- ComponentSpace SAML v2.0 for .NET 使用介绍
下载地址:http://samlsso.codeplex.com/ 以下描叙参考版本为其官网最新版本2.5.0.6.相对2.4版本,2.5有了很大改进,很多接口方法都变了.使用起来更方便,易懂. 广告 ...
- 洛谷P4149 [IOI2011]Race(点分治)
题目描述 给一棵树,每条边有权.求一条简单路径,权值和等于 KK ,且边的数量最小. 输入输出格式 输入格式: 第一行:两个整数 n,kn,k . 第二至 nn 行:每行三个整数,表示一条无向边的 ...
- java中介者模式
中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改.如果使用中介者模式,只需关心和Mediator类的关系 ...
- MacOS安装使用Node.js
1. 到官网https://nodejs.org/zh-cn/download/下载,选择Macintosh Installer, 如下: 2. 按预设的下一步,Node.js版本为v6.10.0, ...
- C#Zxing.net生成条形码和二维码
下载Zxing.net官网:https://archive.codeplex.com/?p=zxingnet 或者去VS程序包下载 封装好的代码: using System; using System ...