搞定後台url uri編碼問題

2021-07-30 14:51:42 字數 1158 閱讀 4785

一般來說,瀏覽器客戶端可以以任意字符集對url進行urlencode,但卻無法讓後端伺服器使用指定的編碼方式,除非後端伺服器擬定了某種特殊規範,比如在http header中新增類似urlencoding:utf-8的請求頭,然後後端伺服器則按照其指定的編碼方式進行解碼。

以下在討論tomcat處理uri的原始碼,首先貼張圖,了解一下url與uri的區別:

對於編譯碼的影響,最大的區別就是uri不包含querystring。

@override

public void service(org.apache.coyote.request req,

org.apache.coyote.response res)

throws exception

charset charset = null;

try catch (unsupportedencodingexception e1)

可以看到,首先會從connector中獲取uriencoding,如果獲取不到,則預設使用iso-8859-1進行解碼。這就是uri傳中文亂碼的根源。

因此,為了指定tomcat解析uri編碼的型別,可以修改tomcat原始碼,將其預設值改為你想要的型別(如utf-8)。但是這樣顯然成本太大,只限於本地debug原始碼除錯時使用。更重要的是,對uri和querystring的解析並不是在同乙個地方進行的,如果修改原始碼,難免有遺漏。從原始碼來看,首先是從connector獲取的編碼方式,這暗示著其是可以配置的。查閱資料發現,可以在tomcat的server.xml中為connector指定uri編碼方式:

綜上,講解了後台tomcat指定解析uri編碼的方式,但對於訊息的編譯碼不只是一方的事情,前後臺都有涉及,因此不出現亂碼的唯一方式就是前後臺編譯碼一致。

前後臺編碼問題

一般設定編碼過濾器 但這種情況只對post有效?前端和後台的頁面也要設定為utf 8 1.post request.setcharacterencoding utf 8 respons.setcharacterencoding utf 8 2.get請求 2.1一般情況 tomcat裡面設定 con...

在ruby中用編碼控制搞定編碼轉型的問題

一般來說 的編碼是統一的不會出現問題的,不過有時候會有這樣的編碼需求出現,在ruby中需要怎麼做呢?現在有這樣乙個例子 乙個頁面需要gbk 乙個頁面需要utf 8 非常幸運在ruby中的預設就是utf 8即使你在html中怎麼寫編碼比如 其實沒有太大作用,關鍵時刻需要使用 headers conte...

java後台編碼規範

目 錄 1 編寫目的 3 2 系統框架介紹 3 2.1 框架技術 3 3 快速開展工作 3 3.1 記憶體中快取資料 3 3.1.1 如何呼叫記憶體快取資料 3 3.1.2 怎樣實現快取資料 4 3.2 服務 5 3.2.1 如何呼叫服務 5 3.2.2 怎樣實現乙個服務 5 3.2.3 如何實現事...