dashboard里面有一个table,table里面的中文内容正常,但是导出成csv文件的时候,用excel打开中文乱码,用notepad代码内容正常。到这里有经验的同学应该知道问题出在哪里了,没错就是csv文件缺少了BOM头。所以用excel打开就是乱码的。

本来是一个很简单的问题,自己在写导出功能的时候也曾碰到过此类问题,只需要在字节流的最前面追加3个字节的bom字节就好了,但是这个问题是splunk里面的,问题难点是找到对应的源码修改之。

解决方案,1:导出的csv文件用notepad打开然后改编码格式问utf-8-bom
2:修改splunk的下载接口的源码,给他加上bom头
~/splunk/lib/python3.7/site-packages/splunk/appserver/mrsparkle/controllers/search.py,下面接口位置getJobAsset()->self.streamJobExport()-> ~/splunk/lib/python3.7/site-packages/splunk/rest/__init__.py.readall()
可以看到这个类返回的是一个genertor类型,添加新方法。针对csv添加新方法,

def readallCsv(self, blocksize=32768):
        """
        Returns a generator reading blocks of data from the response
        until all data has been read
        """
        response = self.response
        fileObject.write(str(type(response)))
        fileObject.flush()
        if kwargs['outputMode'] == 'csv':
            while True:
                data = response.read(blocksize)
            output = ""
            try:
                code_of_html = data.decode()
                output = "".join((codecs.BOM_UTF8.decode(), code_of_html))
                fileObject.write(str(type(data)))
                fileObject.flush()
            except Exception as e:
                break
            if not data:
                break
            yield output

此方法会加上pom头。然后修改search.py.elf.streamJobExport(),针对csv类型跳转到新方法
在streamJobExport()的  stream = rest.streamingRequest(uri, getargs=getargs, postargs=postargs, timeout=export_timeout)此行下面,添加
        if kwargs['outputMode']=='csv':
            result = stream.readallCsv()
        else:
            result=stream.readall()
        return result
至此完美解决问题,csv类型跳转到新方法,其他类型还是原来的方法。

做补充,上述代码有bug,改动后如下

def readallCsv(self, blocksize=32768):
        fileObject = open("/opt/code/logs/search.log", 'a+')
        fileObject.write("\nreadallCsv")
        fileObject.flush()

"""
        Returns a generator reading blocks of data from the response
        until all data has been read
        """
        response = self.response
        fileObject.write(str(type(response)))
        fileObject.flush()
        while True:
            data = response.read(blocksize)
            if not data:
                break
            try:
                data = b'\xef\xbb\xbf' + data
            except Exception as e:
                fileObject.write("\nerror")
                fileObject.write("\n" + traceback.format_exc())
                fileObject.flush()
            if not data:
                break
            yield data

splunk篇5-导出csv文件中文乱码相关推荐

  1. SQL工具导出CSV文件中文乱码

    DBeaver 导出CSV文件中文乱码 相信在做IT开发的人都碰到过,中文乱码的问题.特别是做数据的工程是,经常有用sql查出一批数据后,要导成CSV文件时,发现导出的信息中,中文都是乱码:便会在网上 ...

  2. Pandas导出CSV文件中文乱码解决方法

    问题描述: 使用to_csv方法导出CSV文件,文件出现中文乱码 解决方法: 在使用to_csv时在参数中加入参数encoding='utf_8_sig' 关于原理,请参考以下文章: utf-8和ut ...

  3. Python 爬虫数据写入csv文件中文乱码解决以及天眼查爬虫数据写入csv

    python爬虫数据写入csv文件中文乱码,用'utf-8'在pycharm中打开文件没有问题,但是用excel打开却出现了问题,以下为解决方法. (最近在练习爬虫,这个博文是对自己学习的记录和分享, ...

  4. Python2写csv文件中文乱码问题及解决方法详解

    导读 python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode.decode,这篇文章给大家介绍Python2写csv文件中文乱码问题及解决方法,感兴趣的朋友跟随小编一起看看吧 ...

  5. python 保存本地乱码,解决python保存数据到csv文件中文乱码的方法

    解决python保存数据到csv文件中文乱码的方法 发布时间:2020-07-08 13:49:53 来源:亿速云 阅读:695 作者:清晨 小编给大家分享一下解决python保存数据到csv文件中文 ...

  6. python写入csv文件中文乱码解决方案

    python写入csv文件中文乱码解决方案 参考文章: (1)python写入csv文件中文乱码解决方案 (2)https://www.cnblogs.com/vsivn/p/6115537.html ...

  7. PHP导出CSV文件出现乱码的解决方法

    PHP导出CSV文件出现乱码的解决方法 参考文章: (1)PHP导出CSV文件出现乱码的解决方法 (2)https://www.cnblogs.com/xingxia/p/php_csv.html 备 ...

  8. UTF-8的CSV文件中文乱码问题解决办法

    UTF-8的CSV文件中文乱码问题解决办法 参考文章: (1)UTF-8的CSV文件中文乱码问题解决办法 (2)https://www.cnblogs.com/leaves1024/p/1117138 ...

  9. php 导出mysql csv 乱码_php导出csv文件打开乱码的解决方法

    在php编程中,经常会导出数据为excel或csv文件,不过为了操作方便,大多时候我们会用php导出csv文件. CSV,Comma Separator Value,常常用来数据转换的中间文件存在. ...

最新文章

  1. 远程调用RestTemplate
  2. 哨兵机器人钢力士_还记得秒杀X战警的哨兵机器人吗?在漫威原著里,X战警更憋屈...
  3. 【CyberSecurityLearning 43】安装并启用telnet、SSH服务应用(★)
  4. C++ POD与结构体声明
  5. 在 Asp.Net Core 中使用 worker services
  6. “约见”面试官系列之常见面试题第十九篇之数组去重(建议收藏)
  7. 360桌面计算机,360桌面管理软件
  8. 如何选择程序设计语言
  9. 生成新的dataframe_Python之Pandas使用系列(九):DataFrame中列操作的技巧
  10. leetcode-231-Power of Two
  11. 读《编码-藏匿在计算机软硬件背后的语言》有感
  12. 栈增长方向与大端/小端问题
  13. python学习day1:初识python
  14. 新闻本身具有数量大、更新快、冗余度高
  15. jquery+baidu map api 仿安居客地图找房源(基于百度地图)
  16. OMNeT 例程 Tictoc15 学习笔记
  17. electron制作聊天界面(仿制qq)
  18. CorelDRAW打造金属质感3D立体按钮教程
  19. 麻将判断胡牌 java_麻将胡牌逻辑 java
  20. python系统运维工程师_系统运维工程师的工作职责

热门文章

  1. NCCL下载及安装教程
  2. 5-2. 已有的小车实现samba文件共享
  3. ProGAN: Network Embedding via Proximity Generative Adversarial Network 论文笔记
  4. 1. 代码效率优化方法论
  5. Java学习day096 并发(六)(线程安全的集合:高效的映射、集和队列、映射条目的原子更新、对并发散列映射的批操作、并发集视图、写数组的拷贝、并行数组算法、较早的线程安全集合)
  6. mac电脑显示隐藏文件方法
  7. python 跨知乎app发私信以及Python专栏30万用户信息爬取
  8. Bert预训练新法则!
  9. outlook2016关闭时最小化到任务栏的完美解决方法
  10. BUUCTF misc 专题(22)隐藏的钥匙