zoukankan      html  css  js  c++  java
  • RTMP协议web无插件直播点播平台EasyDSS定制版本开发导出CVS清单有中文乱码是什么原因?

    近期我们在开发EasyDSS的定制项目中,开发了清单导出的功能,用户可将选中的点播文件信息导出为CVS清单,便于查看。在首次测试该功能的时候,清单下载下来后,反馈出现中文乱码:

    但是如果采用编辑器直接打开则是正常的。

    我们使用了wps、vscode、notepad++ 等功能打开文件,都是正常的,但是发现如果采用微软的 office 的 excel 打开,则会出现中文乱码。

    随后我们经过研究发现是office 中文版在安装的时候,会将所有的文本默认采用 gb2312 或者 gbk 编码打开文本,因此出现此种错误。

    对于此问题,我们需要强制将 CVS 的编码设置为 utf-8 bom 格式,当 office 会首先查看该格式,如果查看到了会采用 utf-8 bom 格式打开,就解决了中文乱码问题。

    代码如下:

    // 写入UTF-8 BOM,防止中文乱码
    file.WriteString("xEFxBBxBF")
    

    笔者在最开始编写此模块时,网上人员也建议添加上此行,但是经过测试无问题,并未想到 office 的 excel 会出现此问题,因此又将此行添加进来解决此问题。

    全部代码如下:

    // 创建 CSV 文件
    func CreateCsvFile(filePath string, datas *[][]string) error {
       file, err := os.OpenFile(filePath, os.O_CREATE|os.O_RDWR, 0644)
       if err != nil {
          os.Remove(filePath)
          return err
       }
       defer file.Close()
    
       // 写入UTF-8 BOM,防止中文乱码
       file.WriteString("xEFxBBxBF")
       w := csv.NewWriter(file)
       //w.Write([]string{"开发者名称", "开发者邮箱", "应用名称"})
       // 写文件需要flush,不然缓存满了,后面的就写不进去了,只会写一部分
       err = w.WriteAll(*datas)
       if err != nil {
          os.Remove(filePath)
          return err
       }
       w.Flush()
    
       return nil
    }
    

    EasyDSS还可定制其他功能或者版本,如果有需求,欢迎联系我们了解,此外,EasyDSS提供测试版本,欢迎大家下载测试。

  • 相关阅读:
    利用搜狐查询接口举例说明
    超有用! 地址栏网址静默更新, 进入新网页也可以后退回去,.
    mouseenter 与 mouseover 区别于选择
    使用querySelector添加移除style和class
    网页修改<title ></title >标签内容
    (超实用)前端地址栏保存&获取参数,地址栏传输中文不在乱码
    html页面在苹果手机内,safari浏览器,微信中滑动不流畅问题解决方案
    python归一化方法
    opencv-python之投影
    matplotlib的用法
  • 原文地址:https://www.cnblogs.com/easydss/p/14331643.html
Copyright © 2011-2022 走看看