• UnicodeEncodeError: 'utf-8' codec can't encode character 'udce4' in position 1: surrogates not allowed根本解决方法


    下午开发新改的代码在print路径时出现上述问题,如下:

    Traceback (most recent call last):
      File "./update.py", line 606, in <module>
        replace_exec_script()
      File "./update.py", line 550, in replace_exec_script
        print(file_path.encode('gbk').decode('utf-8'))
    UnicodeEncodeError: 'gbk' codec can't encode character 'udcd6' in position 49: illegal multibyte sequence

    网上搜了半天没找到解决方案。唯一解释到位的就是https://blog.csdn.net/lilongsy/article/details/80724799,其他都是不对号瞎扯,路径中有中文是个明确的需求,不是伪需求。

    最后琢磨着这个udcd6,以及“默认情况下,Python假定所有文件名都已经根据 sys.getfilesystemencoding() 的值编码过了。 但是,有一些文件系统并没有强制要求这样做,因此允许创建文件名没有正确编码的文件。 这种情况不太常见,但是总会有些用户冒险这样做或者是无意之中这样做了( 可能是在一个有缺陷的代码中给 open() 函数传递了一个不合规范的文件名)。”,猜测这不是python的锅,估计linux下显示就是乱码的,果不其然,如下:

    [root@oel-12c 201809]# find ./app/20180108Build/scripts/ -name "*.sql"
    ./app/20180108Build/scripts/conf/000005-????/TA000005_????1.sql
    ./app/20180108Build/scripts/conf/bo-????/12.sql

    将其该文中文后,问题就解决了。那这个????文件名是如何生成的呢?原来是通过xftp上传的,上传时没有指定连接使用UTF-8编码,所以就乱码了。勾上UTF-8编码,问题解决了。

  • 相关阅读:
    12.Docker网络类型
    博客迁移
    java注解
    IO多路复用技术(multiplexing)
    Java 中extends与implements使用方法
    初识autoconf
    初识swoole
    简单配置nginx使之支持pathinfo
    vue-cli 脚手架 安装过程
    PHP阻止页面后退如何用PHP实现禁用浏览器的后退,使后退的页面失效或链接到别的地方?使用php禁止浏览器缓存?
  • 原文地址:https://www.cnblogs.com/zhjh256/p/9984011.html
Copyright © 2020-2023  润新知