一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Tomcat啟動(dòng)中文亂碼問題

 ZhouAndrew 2024-12-07

前言

IDEA中啟動(dòng)一個(gè)項(xiàng)目,又或者在bin目錄下啟動(dòng)startup.bat
tomcat啟動(dòng)日志總是中文亂碼,強(qiáng)迫癥的我實(shí)在受不了,就網(wǎng)上查詢了解決方案。
懶得看的細(xì)節(jié)同志可以直接從目錄跳轉(zhuǎn)第三種方案

一、亂碼原因

系統(tǒng)CMD運(yùn)行時(shí)的編碼方式是GBK,而tomcat日志默認(rèn)編碼方式為UTF-8
所以啟動(dòng)tomcat時(shí),中文日志就會(huì)亂碼

二、解決方案

本人使用tomcat 9版本
解決方案都是從互聯(lián)網(wǎng)搜尋獲得,如有其他方案,希望補(bǔ)充

1.將tomcat日志配置改為GBK編碼(不推薦)

打開tomcat的conf目錄,編輯logging.properties配置文件。
大概在51行

java.util.logging.ConsoleHandler.encoding = UTF-8

將UTF-8改為GBK即可
不推薦使用此方法,因?yàn)閁TF-8編碼方式更通用

2.IDEA配置自定義VM選項(xiàng)

在這里插入圖片描述
在這里插入圖片描述
在最后一行加一句
-Dfile.encoding=UTF-8
重啟IDEA后,啟動(dòng)tomcat中文就不會(huì)亂碼,但是startup.bat不知道是否亂碼,沒有嘗試,因?yàn)槲矣昧说谌N方法。

3.修改系統(tǒng)默認(rèn)編碼方式(本人使用)

打開控制面板-> 區(qū)域-> 更改系統(tǒng)區(qū)域設(shè)置
在這里插入圖片描述
在這里插入圖片描述

勾選UTF-8即可
此時(shí)查看cmd屬性
在這里插入圖片描述

新打開cmd都是UTF-8的編碼方式
(修改之前每次都是默認(rèn)GBK編碼,修改后好像cmd界面有些變化)

此時(shí)不論是IDEA還是直接使用startup.bat啟動(dòng),都不會(huì)亂碼

3.1尋找方法時(shí)的小插曲

在尋找第三種方法時(shí)我曾查詢?nèi)绾问筩md永久保持UTF-8編碼
在cmd中輸入:chcp 65001
可以讓本次窗口改編為utf-8編碼
輸入chcp 936 可本次改回GBK模式
永久更改是寫了一個(gè)注冊(cè)表
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

在這里插入圖片描述
點(diǎn)擊右鍵-新建,選擇“字符串值”。
在這里插入圖片描述
命名為“autorun”, 點(diǎn)擊右擊修改,數(shù)值數(shù)據(jù)填寫“chcp 65001”,確定。

此方法百度經(jīng)驗(yàn)查詢獲得
本質(zhì)上和前面沒什么區(qū)別,就是每次打開cmd改為UTF-8,
但是對(duì)于啟動(dòng)startup.bat中文亂碼,沒有任何作用

下面引用CSDN另一個(gè)文章永久修改cmd編碼的文章

永久性修改就是通過修改注冊(cè)注冊(cè)表達(dá)到。

打開注冊(cè)表方法:略

定位到:HKEY_CURRENT_USER\Console%SystemRoot%_system32_cmd.exe

PS:近期看到下面評(píng)論反應(yīng)很多人在這里找不到 cmd 的選項(xiàng),由于最近換了新電腦,新安裝的 window 10 1903
專業(yè)版確實(shí)默認(rèn)找不到(舊版升級(jí)過來的可能還保留有),考慮到自己手動(dòng)添加也比較麻煩,建議大家直接轉(zhuǎn)投 powershell 吧,畢竟
powshell 更強(qiáng)大,也是微軟主推的未來的趨勢(shì)(未來 cmd 就會(huì)被 powshell替代掉),而且 powshell 也借鑒了一些
Linux bash 的使用習(xí)慣,而且 powshell 是跨平臺(tái)的喲,你也可以在 Linux 下安裝使用,替代 Linux 默認(rèn)的
bash 。更多詳情參考:powshell 官方文檔

對(duì)于沒有 CodePage 的,可以鼠標(biāo)右鍵-> 新建 -> DWORD(32位)值,創(chuàng)建即可。
在這里插入圖片描述

之后通過 “shift + 鼠標(biāo)右鍵” 打開的 powershell 默認(rèn)代碼頁(yè)就是 65001 即 UTF-8。

同理你也可以修改:powershell
的默認(rèn)編碼。如果有人因?yàn)闄?quán)限問題無法修改的,可以右鍵左邊選中的紅框,選擇權(quán)限,賦給自己完全控制的權(quán)限就OK了!

順便補(bǔ)充一篇跟本文有關(guān)系的另一篇博文:將 Windows10 中的 bash 添加至右鍵菜單

此外微軟新版的 window terminal 也已在 window
商店上架,新版對(duì)字體支持更加友好,更多特性可以參考:https://github.com/microsoft/terminal

———————————————— 版權(quán)聲明:本文為CSDN博主「「已注銷」」的原創(chuàng)文章,遵循CC 4.0
BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/gulang03/article/details/81771343

此博主方法沒有嘗試,因?yàn)槭莗owershell,效果不太確定

三、新問題tomcat日志正常,但是print中文亂碼

2022/1/10

又發(fā)現(xiàn)了新的問題,方法二和方法三需要混合使用
方法三可以讓cmd轉(zhuǎn)為UTF-8,
方法二可以讓IDEA轉(zhuǎn)為UTF-8

2022/1/11

在學(xué)習(xí)tomcat的servlet時(shí)發(fā)現(xiàn)
tomcat日志中文是正常的
但是通過System.out.println(“中文”)
就會(huì)亂碼

 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding('UTF-8');
        resp.setContentType('text/html;charset=utf-8');

        ServletContext context = this.getServletContext();
        System.out.println('進(jìn)入了getdispatcher');
        context.getRequestDispatcher('/gp').forward(req ,resp);

        String charset ='GBK'; //假定編碼格式
        String str = '中文';

        boolean flag = str.equals(new String(str.getBytes(),charset));
        System.out.println(flag);
        System.out.println('當(dāng)前JRE:' + System.getProperty('java.version'));
        System.out.println('當(dāng)前JVM的默認(rèn)字符集:' + Charset.defaultCharset());


    }

但是如果離開server環(huán)境單獨(dú)測(cè)試時(shí)卻不同

import java.io.UnsupportedEncodingException;import java.nio.charset.Charset;public class TestCharacter { public static void test(){ System.out.println('當(dāng)前JRE:' + System.getProperty('java.version')); System.out.println('當(dāng)前JVM的默認(rèn)字符集:' + Charset.defaultCharset()); } public static void test2(){ String charset ='GBK'; //假定編碼格式 String str = '中文'; boolean flag = true; try { flag = str.equals(new String(str.getBytes(),charset)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.println(flag); } public static void main(String[] args) { test(); test2(); }}

會(huì)出現(xiàn)這樣的結(jié)果
在這里插入圖片描述

最后百度增加了環(huán)境變量
在系統(tǒng)的環(huán)境變量中添加一個(gè)變量,名為: JAVA_TOOL_OPTIONS, 值為:-Dfile.encoding=UTF-8
這樣就能讓server下的中文也變成UTF-8編碼
在這里插入圖片描述
問題雖然解決了但是我還是感覺很混亂
于是我做了以下嘗試

test1:

測(cè)試條件:
刪除了環(huán)境變量 JAVA_TOOL_OPTIONS.
在tomcat配置VM- options: 填入:-Dfile.encoding=UTF-8
IDEA help->edit custom VM options中保留-Dfile.encoding=UTF-8

在這里插入圖片描述
測(cè)試結(jié)果:
server中的tomcat日志中文正常顯示
server中的println中文正常顯示

test2:

測(cè)試條件:
環(huán)境變量設(shè)置JAVA_TOOL_OPTIONS -Dfile.encoding=UTF-8
刪除tomcat中的 -Dfile.encoding=UTF-8配置
刪除help中的 -Dfile.encoding=UTF-8配置

測(cè)試結(jié)果
server中的tomcat日志中文正常顯示
server中的println中文正常顯示

注意所有測(cè)試前提,都是已經(jīng)全部設(shè)置為UTF-8環(huán)境的,包括一開始出錯(cuò)
在這里插入圖片描述

結(jié)論:

也就是說只需要設(shè)置一個(gè)環(huán)境變量就可以代替tomcat和VM options配置

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    久久大香蕉一区二区三区| 国产精品推荐在线一区| 久热99中文字幕视频在线| 成人午夜视频在线播放| 国产内射一级一片内射高清| 国产又粗又硬又大又爽的视频| 激情五月激情婷婷丁香| 1024你懂的在线视频| 亚洲香艳网久久五月婷婷| 日韩黄色大片免费在线| 国产综合欧美日韩在线精品| 福利专区 久久精品午夜| 五月婷婷综合缴情六月| 亚洲男人天堂成人在线视频| 国产一区日韩二区欧美| 日本高清加勒比免费在线| 国产精品一区二区日韩新区| 国产99久久精品果冻传媒| 亚洲人妻av中文字幕| 亚洲av又爽又色又色| 国产三级视频不卡在线观看| 国产精品蜜桃久久一区二区| 亚洲欧美日产综合在线网| 有坂深雪中文字幕亚洲中文 | 国产精品日韩欧美第一页| 国产在线成人免费高清观看av| 亚洲做性视频在线播放| 欧美日韩在线视频一区| 欧美一区日韩一区日韩一区| 亚洲精品伦理熟女国产一区二区| 一区二区日本一区二区欧美| 国产精品日韩欧美一区二区| 男人把女人操得嗷嗷叫| 国产在线日韩精品欧美| 99久久国产精品成人观看| 亚洲一区二区三区中文久久| 欧美成人免费夜夜黄啪啪| 国产午夜福利不卡片在线观看| 欧美日韩国产精品第五页| 国产成人精品一区二区三区| 在线亚洲成人中文字幕高清|