1. 程式人生 > >GBK轉UTF-8時,奇數箇中文會亂碼,偶數箇中文不會亂碼

GBK轉UTF-8時,奇數箇中文會亂碼,偶數箇中文不會亂碼

遇到的問題的場景: 兩個後臺伺服器互動,兩個專案的預設編碼都是UTF-8,但是當互動時(A->B),就會出現奇數箇中文時會亂碼。

重點:GBK編碼是一箇中文2個位元組,而UTF-8編碼是一箇中文3個位元組,當我們呼叫getBytes(“UTF-8”)方法時,會通過計算來增加位元組,使得從GBK的2個位元組變成UTF-8對應的3個位元組。因此,奇數箇中文會導致最後的字元位數不對應,而導致亂碼。

知道了這個原因,然後分析專案,兩個專案的預設編碼都為UTF-8,請求的編碼也為UTF-8(request.getCharacterEncoding()可以獲取請求的編碼),只能時容器的編碼不對,然後通過Charset.defaultCharset()來獲取JVM的預設字元編碼格式,發現為GBK,問題找到了。

解決辦法:
修改JVM的預設編碼格式
方法1、tomcat中修改:修改catalina.bat,新增如下(set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8)
方法2、Idea中新增預設引數:在這裡插入圖片描述

相關推薦

GBKUTF-8奇數箇中亂碼偶數箇中亂碼

遇到的問題的場景: 兩個後臺伺服器互動,兩個專案的預設編碼都是UTF-8,但是當互動時(A->B),就會出現奇數箇中文時會亂碼。 重點:GBK編碼是一箇中文2個位元組,而UTF-8編碼是一箇中文3個位元組,當我們呼叫getBytes(“UTF-8”

網頁格式gbkutf-8【python requests】

sts url ont content req utf nic tex ext resp = requests.get(url) resp.content 是str格式 resp.text是unicode格式 如果返回的中文使用gbk編碼,需要轉換成utf-8的時候:

檔案編碼轉化 GBK UTF-8工具類

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import ja

Java 中文字串編碼之GBKUTF-8

寫過兩篇關於編碼的文章了,以為自己比較瞭解編碼了呢?! 結果今天又結結實實的上了一課。 以前轉來轉去解決的問題終歸還是簡單的情形。即iso-8859-1轉utf-8,或者iso-8859-1轉gbk,gb2312之類。這種無損轉換,一行程式碼就搞定。 今天遇到了gbk轉utf-8。無論怎麼轉,都是亂碼。 一

C語言漢字gbkutf-8

一、注意事項 1.請注意漢字內碼(對應字元為\xcc等)和打印出的轉義字元(\\xcc)的區別!!!!該問題導致我們程式除錯了差不多一整天! 2.另外庫函式iconv會把傳入的引數指標移位,這是正常的、請不要認為是自己程式有問題。 3.我的終端是utf-8格式,對於其他編

java gbkutf-8亂碼問題

最近在做一個反饋功能,把資料反饋到對方公司網站,我公司是GBK編碼,對方公司是UTF-8編碼。因此,我需要將GBK編碼資料轉換成UTF-8編碼資料,這樣對方網站才不會亂碼。最簡單的方法是將HttpClient的ContentCharset設定為utf-8;如果Content

java程式碼中GBKUTF-8的工具類

一.程式碼示例 public static byte[] getUTF8BytesFromGBKString(String gbkStr) { int n = gbkStr.length(); byte[] utfBytes = new byte[3 * n]; in

GBKUTF-8遇到問題及解決方案

當文字長度為奇數時轉為GBK再轉回UTF-8時會出現末尾字元亂碼的情況,在此特地記錄一下解決方案 最近在寫一個根據模板標籤生成word的專案,在本地測試無問題但是放到伺服器上會出現生成字元亂碼的情況, 考慮到GBK轉UTF-8使用getBytes只有在長度為

配置Tomcat的server.xml編碼為UTF-8再次發布項目編碼自動還原問題?

image launch ref eclipse 重新 再次 oca eclips 技術 當我們在處理中文亂碼或是配置數據源時,我們要修改Tomcat下的server.xml 但是當我們修改完後重啟Tomcat服務器時發現xml文件又被還原了,修改無效果。 為什麽會還原

ASCIIUnicodeGBKUTF-8字符編碼的區別聯系

技術 最大的 發展 時代 AC 人類 資料 新的 字節 ASCII,Unicode,GBK和UTF-8字符編碼的區別聯系 wyrssktzc11級分類:其他被瀏覽86次2016.05.27 檢舉 KingSta逍遙 采納率:45%7級20

ASCIIUnicodeGBKUTF-8字符編碼的區別和聯系

online 擴展 集合 發展 核心 長度 打開 選擇 最大 如果經常寫python2,肯定會遇到各種“奇怪”的字符編碼問題,每次都通過谷歌解決了,但是為什麽會造成這種亂碼、decode/encode失敗等等,本文就字符和字符編碼做一個總結,更加清晰區分諸多的編碼。 字符集

python在gbk編碼轉換成utf-8亂碼問題

例項網站:http://www.ip138.com/ips138.asp?ip=124.24.13.241&action=4 #專案爬蟲,環境python-下載匯入requests、lxml包 #url時是查ip位置的介面 url_1='http://www.ip1

編碼encode表現形式是轉換成 bytes實際轉換成gbk或者utf-8

# s = 'alex'# s1 = b'alex'# print(s,type(s))# print(s1,type(s1)) # s = '中國'# print(s,type(s))# s1 = b'中國'# print(s1,type(s1)) s1 = 'alex'# encode 編碼,如何將s

字串互utf-8gbk

有如下字串:n = "路飛學城"(程式設計題)       - 將字串轉換成utf-8的字元編碼,再將轉換的位元組重新轉換為utf-8的字元編碼 n = "路飛學城" n_e_u = n.encode("utf-8") # b'\xe8\xb7\xaf\x

c++中gbkutf-8

gbk轉utf-8 char* G2U(const char* gb2312) { ASSERT(gb2312!=NULL); int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);

PHP中文GBK編碼UTF-8

iconv 和 mb_convert_encoding的區別 函式比較 string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] ) 需要先enable mbstring 擴充套件庫,在 php

python3的url編碼和解碼自定義gbkutf-8

因為很多時候要涉及到url的編碼和解碼工作,所以自己製作了一個類,廢話不多說 碼上見!# coding:utf-8 import urllib.parse class Urlchuli(): """Url處理類,需要傳入兩個實參:Urlchuli('實參','編碼

編碼的由來GBKUTF-8

      很久很久以前,有一群人,他們決定用8個可以開合的電晶體來組合成不同的狀態,以表示世界上的萬物。他們看 到8個開關狀態是好的,於是他們把這稱為”位元組“。再後來,他們又做了一些可以處理這些位元組的機器,機器開動了, 可以用位元組來組合出很多狀態,狀態開始變來變去。

Java專案GBK編碼UTF-8

方法一:使用Apache的common-io 1.maven專案pom.xml <dependency> <groupId>commons-io</groupId> <artif

Android ndk中字串utf-8gbk

轉utf-8jstring cToJstringutf(JNIEnv* env, const char* pat) { jclass strClass = (*env)->FindClass(env, "java/lang/String"); jmethodID