1. 程式人生 > >架構相關:全方位解析web產品中的編碼問題

架構相關:全方位解析web產品中的編碼問題

網際網路的的實質大致可以歸結為資料之間的互動,而互動就不得不涉及到資料的編碼解碼轉嗎等等一些問題。

而在實際工作中發現很多開發同事對這些並沒有一個清晰完整的認識,這裡就我目前為止接觸的產品編碼相關做一下全方位的總結。

這裡按照使用者輸入url開啟網頁這一場景的順序進行解析:

1、當在瀏覽器輸入url的時候在瀏覽器端發生了什麼?

url預設使用utf-8,url後帶引數的編碼方面有一個預設編碼的概念,大部分情況下系統預設編碼是utf-8,瀏覽器也會按照系統預設編碼對url後帶的引數進行編碼。

這就會導致一個問題,如果在一個預設編碼不是utf-8的系統下輸入url,且引數中有中文,這是server端解析引數就會出現問題。但是一般是不需要使用者手動輸入url引數的,這個問題可以忽略。如果在頁面中用js或<a>標籤開啟一個url,它的編碼會按照該頁面的編碼設定,也不會存在這個問題。

如果不進行對整個頁面的編碼設定能否保證url的編碼正確呢?這個當然是可以的。

js使用 encodeURI()方法後,url中的某些字元將被十六進位制的轉義序列進行替換,這個替換的本質是二進位制資料的操作,這樣最後得出的字串自然就保留了替換時的編碼方式。server端會自動識別%符號進行解碼。接下來我們到了第二步。

2、在server接收到字串的時候發生了什麼?

上面提到了,當server端發現url資料流中包含%符號的時候會自動將資料流解碼成二進位制資料流,這之後還需要一個過程才能得到我們的中文字元,那就是用預設編碼進行解碼,很多時候是utf-8,但很多都不是,所以需要對server進行進行設定。

tomcat是修改server.xml檔案,

              <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8" />

這樣在容器解析url的時候使用utf-8的編碼方式。

大家肯定見過 request.setCharacterEncoding("UTF-8"); 這一方法,但它和上面的區別是它只能控制程式中POST方法提交的引數的解碼方式,且它只能在引數被訪問之前設定,訪問後設置無效,因為容器會自動讀取預設編碼對引數進行解析。這麼看最根本的方法還是將預設編碼統一掉。

3、頁面上是如何設定編碼方式的?

html是在瀏覽器端解析的,所以只要在檔案頭部加

<metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/> 標籤就可以對瀏覽器讀取該檔案的編碼方式進行設定,當然如果是在這個標籤之前的內容瀏覽器會使用預設編碼,因為一般頭部都是一些純英文字元,即使用GBK編碼讀取也是沒有問題的。該頁面包含的所有js、css檔案也都會按照html檔案的編碼方式解析。

這個規則無論是對jsp、php、ejs、還是jsx都是有效的:p

當然其中在server端執行的部分還是根據server的預設解碼進行,比如開發過程中IDE會設定預設編碼,直譯器自然會根據預設編碼對程式碼進行解析。比如java將字串轉為unicode。

4、資料庫編碼方式的的設定

這個比較簡單,基本上所有種類的資料庫管理軟體都可以進行選擇設定。

相關推薦

架構相關全方位解析web產品編碼問題

網際網路的的實質大致可以歸結為資料之間的互動,而互動就不得不涉及到資料的編碼解碼轉嗎等等一些問題。 而在實際工作中發現很多開發同事對這些並沒有一個清晰完整的認識,這裡就我目前為止接觸的產品編碼相關做一下全方位的總結。 這裡按照使用者輸入url開啟網頁這一場景的順序進行解析:

技術內參 | 神策分析架構演進“變”與“不變” 的思索與創新

作者:付力力,神策資料聯合創始人&技術 VP  畢業於北京理工大學軟體工程專業,2008 年至 2013 年期間歷任百度新產品研發部、網頁搜尋部、基礎架構部工程師。2013 年 9 月年至 2014 年 8 月擔任豌豆莢資料部門資深研發工程師。2014 年 9

實戰在Java Web專案使用HBase

在此之前我們使用MySQL作為資料來源,但發現這資料增長速度太快,並且由於種種原因,因此必須使用HBase,所以我們要把Mysql表裡面的資料遷移到HBase中,在這裡我就不講解、不爭論為什麼要使用HBase,HBase是什麼了,喜歡的就認真看下去,總有些地方是有用的。 我

ssm框架web專案applicationContext.xml及相關配置檔案解析

一、概述 applicationContext.xml,即Spring上下文配置檔案,用於完成Spring和MyBatis的整合。主要配置bean自動掃描、依賴注入、資料庫、事務等。如下 <?xml version="1.0" encoding="UTF-8"?> &l

多工程基於Maven的SSM(Spring,SpringMvc,Mybatis)整合的web工程()

png 開始 版本 war mage ont 右鍵 調用 web工程 上篇用了單工程創建了SSM整合的web工程(http://www.cnblogs.com/yuanjava/p/6748956.html),這次我們把上篇的單工程改造成為多模塊工程 一:創建

jQuery技術內幕深入解析jQuery架構設計與實現原理

源碼 att root 功能 技術內幕 瀏覽器 sel 緩存 callbacks jQuery源碼(jquery-1.7.1.js)的總體結構:(function( window, undefined ) {// 構造jQuery對象 var jQuery = (fun

詳解Web請求的DNS域名解析

返回 .com 承擔 接受 性能 出現 感覺 技術 image   當我們打開瀏覽器,輸入一個URL去請求我們需要的資源,但是URL是需要解析成對應的IP地址才能與遠程主機建立連接,如何將URL解析成IP就是DNS的工作範疇,即使作為開發人員,這個過程我們也感覺不到,但是它

架構師提升篇分布式系統,如何提升系統性能?

架構師在分布式系統中,平衡業務計算的壓力分布,減少網絡上的數據流動,是一種提升性能的手段,請看下面的例子。1)案例背景某“機械設計研究所”歷史上在管理模式上采用傳統的層次化垂直結構。但是近年來,隨著用戶對產品更新換代的要求越來越快、質量要求越來越高,在競爭日益劇烈、外部壓力日益增大的形勢下,該所在管理模型上重

Web服務器之Tomcat的相關說明(Web訪問的角色與協議問題和JavaWeb項目的程序結構問題)

b/s架構 c/s架構 context.xml說明 server.xml說明 javaweb項目的程序結構 1、C/S架構和B/S架構的概念:a、C/S架構:- C/S,Client/Server,客戶端/服務器,客戶端需要安裝專用的客戶端軟件。客戶端是針對某以具體業務專門開發的軟件。-

Jmeter Web 性能測試入門 (六)Jmeter 解析 response 並傳遞 value

pre 數據 put -c beanshell shel val sed ima 解析response中的內容,並把獲取到的value傳遞到後續的request中,常用的方法就是在想要解析response的request上添加後置處理器本章介紹兩種常用的組件 BeanSh

【OSS最佳實踐】WEB站點如何應用OSS產品

put discuz論壇 瓶頸 個人 得到 行為 ssim 雲安全 實現 【OSS最佳實踐】WEB站點中如何應用OSS產品http://www.bieryun.com/1194.htmlOSS提供了海量、安全、低成本、高可靠的雲存儲服務,用戶可以通過SDK、API、OSS相

Eclipsemaven專案報錯org.springframework.web.filter.CharacterEncodingFilter

寫了一個demo,發現在tomcat中部署完專案,啟動時報錯。 1,問題描述 2,解決辦法 1)程式在部署完成後報錯,說明是程式是編譯通過的,即編譯編譯路徑Java Build Path沒問題。 2)此時檢視 專案Properties—Deployment

學習筆記(七)樸素貝葉斯在Web安全的六個應用

一、檢測Web異常操作        1.資料蒐集:一樣        2.特徵化             使用詞集模型,統計全部操作命令,去重後形

解析微服務架構(二)微服務重構應用及IBM解決方案

解析微服務架構系列文章將分幾篇描述微服務的定義、特點、應用場景、企業整合架構的演進以及微服務轉型思路和技術決策考慮等內容,並以IBM技術為例介紹如何實現微服務架構轉型。 上一篇文章介紹了融入微服務的企業整合架構的演進,並介紹互動式系統的微服務模式及技術決策例子。 本篇文章將介紹已有IT應用如

解析微服務架構(一)融入微服務的企業整合架構

本文將介紹融入微服務的企業整合架構的演進,並描述互動式系統的微服務模式及相關技術決策,然後給出了一個具體的微服務架構業務應用的例子。   互動型系統(System of Engagement)與記錄型系統(System of Record) 隨著移動網際網路的快速發展,企業除了

webRTC音訊相關的netEQ(五)DSP處理 webRTC音訊相關的netEQ(四)控制命令決策 webRTC音訊相關的netEQ(二)資料結構)

上篇(webRTC中音訊相關的netEQ(四):控制命令決策)講了MCU模組是怎麼根據網路延時、抖動緩衝延時和反饋報告等來決定給DSP模組發什麼控制命令的。DSP模組根據收到的命令進行相關處理,處理簡要流程圖如下。   從上圖看出如果有語音包從packet buffer裡取出來先要做解碼得到PC

軟體測試員必備Web測試需要注意的16個小細節

隨著Internet和Intranet/Extranet的快速增長,Web已經對商業、工業、銀行、財政、教育、政府和娛樂及我們的工作和生活產生了深遠的影響。許多傳統的資訊和資料庫系統正在被移植到網際網路上,電子商務迅速增長,早已超過了國界。範圍廣泛的、複雜的分散式應用正在Web環境中出現。Web的流

CNN分類網路架構演進從LeNet到Densnet解析及其keras實現

文章轉自:http://www.cnblogs.com/skyfsm/p/8451834.html 卷積神經網路可謂是現在深度學習領域中大紅大紫的網路框架,尤其在計算機視覺領域更是一枝獨秀。CNN從90年代的LeNet開始,21世紀初沉寂了10年,直到12年AlexNet開始又再煥發第二春,從Z

web標準的網頁結構層、表現層、行為層

web網頁 WWW,World Wide Web(全球資訊網)的縮寫。全球資訊網通常也簡稱為Web,它是由無數的商業教育,娛樂等資料組成的一個龐大的資訊空間。我們在這個資訊空間裡遨遊,瀏覽,搜尋資料最終呈現在瀏覽器中的資訊,就是Web頁面。 對Web前端與HTML,CSS,JavaScr

轉:軟體測試員必備Web測試需要注意的16個小細節

http://blog.sina.com.cn/s/blog_679bde160102xyj8.html   軟體測試員必備:Web測試中需要注意的16個小細節 轉載 2018-11-07 17:55:38 標籤:軟體測試web測試 隨著Internet和Intrane