字符集问题讨论 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
OnlyJack
V2EX    Linux

字符集问题讨论

  • /li>  
  •   OnlyJack 3 天前 1086 次点击

    版本 spring boot 2.7.18 jdk version 1.8

    问题:ECS 启动 打印的日志有中文 无乱码情况,到容器运行之后 竟然出现了部分中文乱码,详细把基础镜像、业务镜像都拆分了一遍 专门加上 LANG=en_US.UTF-8 ,仍然无用 包括在 k8s yaml 都增加了环境变量 依然显示 LANG=C.utf8 ,最终发现是通过阿里云控制台登录容器终端,字符集确实是有问题 通过 kubectl exec 进去之后,显示字符集是没问题的,但 java 服务启动依然会有部分中文乱码。

    大佬们,请把你们的解决方案放在评论区~

    18 条回复    2025-11-14 17:25:10 +08:00
    dode
        1
    dode  
       3 天前
    吃瓜
    OnlyJack
        2
    OnlyJack  
    OP
       3 天前
    @dode 好瓜
    Dorathea
        3
    Dorathea  
       3 天前
    不用中文日志, 不折腾...
    OnlyJack
        4
    OnlyJack  
    OP
       3 天前
    @Dorathea 大佬说得对,但是项目运行之后 一些落库的 含有中文,也会有乱码情况
    dode
        5
    dode  
       3 天前
    使用 debian 、ubuntu 容器镜像,安装中文语言包,部署启动应用服务
    OnlyJack
        6
    OnlyJack  
    OP
       3 天前
    @dode 在基础镜像 尝试了,无用 仍然会乱码~
    midsolo
        7
    midsolo  
       3 天前
    有排除疑难杂症的时间,不如构建一个支持中文的 ubuntu 镜像。

    FROM ubuntu:20.04
    RUN apt-get update && \
    apt-get install -y language-pack-zh-hans locales && \
    locale-gen zh_CN.UTF-8 && \
    update-locale LANG=zh_CN.UTF-8
    ENV LANG=zh_CN.UTF-8
    ENV LC_ALL=zh_CN.UTF-8
    julyclyde
        8
    julyclyde  
       3 天前   1
    应该是你没明白环境变量的传播关系导致的
    我猜你说的“专门加上”是加在 bashrc 甚至.bash_profile 里了
    shuangbiaog
        9
    shuangbiaog  
       3 天前
    有没有检查 jvm 启动参数和日志框架配置呢
    runliuv
        10
    runliuv  
       3 天前
    java -Dfile.encoding=utf-8 。
    要么控制台有乱码,要么 TXT 日志有乱码。反正 2 者乱一样儿。
    OnlyJack
        11
    OnlyJack  
    OP
       3 天前
    @midsolo 是的 构建了,依然不行哦 尝试过了的
    OnlyJack
        12
    OnlyJack  
    OP
       3 天前
    @julyclyde 对 其实和环境变量没啥太大关系
    vvtf
        13
    vvtf  
       3 天前
    java 没特别设置的不会是乱码, 你可以把日志拉到本地看下是不是 utf8 格式的.
    所以大概率就是终端的乱码.
    需要 exec -ti 进入容器时设置一下 LANG 试试.
    OnlyJack
        14
    OnlyJack  
    OP
       3 天前
    @shuangbiaog 加的都挺全了,依然是部分中文乱码

    -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8 -Dspring.http.encoding.charset= -Dspring.http.encding.enabled=true -Dspring.messages.encoding=UTF-8
    OnlyJack
        15
    OnlyJack  
    OP
       3 天前
    @vvtf exec -it 容器内是 LANG=en_US.UTF-8
    OnlyJack
        16
    OnlyJack  
    OP
       3 天前   1
    感谢各位大佬~ 实际上的问题出在 java 项目上,在编译的过程中 父 pom 没有指定 utf-8 导致的,包括子 pom 和运行过程中导致的。

    其实这个相当于 java 项目不规范导致的,理论上都要增加 utf-8 并且要设置为全局。

    父 pom 配置
    <!-- 设置项目编码为 UTF-8 ,解决编译和运行时的中文乱码问题 -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>


    子 pom 配置
    <encoding>UTF-8</encoding>


    WebApplication.java

    // 设置系统默认编码为 UTF-8 ,解决容器环境中文乱码问题
    // 必须在 Spring Boot 启动之前设置,确保日志输出使用正确的编码
    System.setProperty("file.encoding", "UTF-8");
    System.setProperty("sun.jnu.encoding", "UTF-8");
    julyclyde
        17
    julyclyde  
       3 天前
    @OnlyJack exec 那是 non login shell 的
    和 java 进程的环境变量是两码事
    OnlyJack
        18
    OnlyJack  
    OP
       1 天前
    @julyclyde 是的,只是这么阐述~~~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2514 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 07:03 PVG 15:03 LAX 23:03 JFK 02:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86