1. 程式人生 > >RobotFramework環境配置十:中文日誌亂碼問題

RobotFramework環境配置十:中文日誌亂碼問題

中文日誌亂碼問題

一、編碼支援
. ASCII編碼:美國資訊交換標準程式碼(American Standard Code for InformationInterchange,簡稱ASCII)是一種用於資訊交換的美國標準程式碼,它的作用是給英文字母、數字、標點、字元轉換成計算機能識別的二進位制數規定了一個大家都認可並遵守的標準。
. GB2312編碼:適用於漢字處理、漢字通訊等系統之間的資訊交換
. GBK編碼:是漢字編碼標準之一,是在 GB2312-80 標準基礎上的內碼擴充套件規範,使用了雙位元組編碼
. ANSI是與你使用的windows作業系統的語言有關係的,向windows 7 簡體中文版就是GBK(用一個位元組表示英文,用兩個位元組表示一箇中文)
. Unicode編碼:這是一種世界上所有字元的編碼,但是它沒有規定的儲存方式。Unicode標準也在不斷髮展,但最常用的是用兩個位元組表示一個字元(如果要用到非常偏僻的字元,就需要4個位元組)。現代作業系統和大多數程式語言都直接支援Unicode。
. UTF-8編碼:是 Unicode Transformation Format - 8 bit 的縮寫, UTF-8 是 Unicode 的一種實現方式。它是可變長的編碼方式,可以使用 1~4 個位元組表示一個字元,可根據不同的符號而變化位元組長度。

二、編碼轉換
Python內部的字串一般都是 Unicode編碼。

  1. 程式碼中字串的預設編碼與程式碼檔案本身的編碼是一致的。
  2. 所以要做一些編碼轉換通常是要以Unicode作為中間編碼進行轉換的,即先將其他編碼的字串解碼(decode)成 Unicode,再從 Unicode編碼(encode)成另一種編碼。Gbk儲存的字元->decode(“GBK”)->unicode->encode(“utf-8”)

這裡寫圖片描述

Ø decode 的作用是將其他編碼的字串轉換成 Unicode 編碼
例如:name.decode(“GB2312”),表示將GB2312編碼的字串name轉換成Unicode編碼
Ø encode 的作用是將Unicode編碼轉換成其他編碼的字串
例如: name.encode(”GB2312“),表示將unicode字串name轉換成GB2312編碼
Ø進行編碼轉換的時候必須先知道 name 是那種編碼,然後 decode 成Unicode 編碼,最後再 encode 成需要編碼
Øname 已經就是 Unicode 編碼了,那麼就不需要進行 decode 進行解碼轉換了,直接用 encode 就可以編碼成你所需要的編碼

Ø對中文unicode字元decode會報錯。英文字元呼叫decode方法不會有問題。
u’中文’把資料已經儲存為unicode。當用decode(‘gbk’)解碼時,就變成非unicode編碼(ASCII碼)了。當print到螢幕時,把ASCII編碼(encode)成(‘gbk’)。但是,ASCII碼不支援中文。報錯!
英文不報錯是因為ASCII碼支援英文(python程式碼)。
這裡寫圖片描述

三、檔案儲存和讀取的編碼
.在計算機記憶體中,統一使用Unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼。
.用記事本編輯的時候,從檔案讀取的UTF-8字元被轉換為Unicode字元到記憶體裡,編輯完成後,儲存的時候再把Unicode轉換為UTF-8儲存到檔案:
這裡寫圖片描述

但是,檔案含有GBK編碼的中文會報錯(python程式碼)。
有一個觀點得理清:並不是中文就是是gbk編碼
gbk是一種編碼方式,gbk可以表示中文
utf-8 也是一種編碼方式,也可以表示中文
主要取決於你的檔案本身是通過什麼格式編碼的:
1、 如果在windows下,通過新建檔案,手工輸入中文,則編碼格式是gbk,因為中文版的windows下,gbk是預設編碼格式
2、 如果在pycharm或者其他編譯器 下,新建檔案,並且寫入的中文,則編碼格式是utf-8,如果統一更改過pycharm等編輯器的編碼格式。

這裡寫圖片描述

這裡寫圖片描述

從檔案中讀取到記憶體,是以unicode儲存中文(‘gbk’)編碼。終端顯示時,decode(‘gbk’)轉碼為中文(‘gbk’)。
如果用decode(‘utf-8’)轉碼時,會因為編碼方式與中文編碼(‘gbk’)不同報錯。

這裡寫圖片描述

四、RIDE中文日誌亂碼問題

這裡寫圖片描述
因為 Windows 平臺是 gbk(cp936)編碼,需要判斷。
原始碼:testrunner.py
C:\Python27\Lib\site-packages\robotide\contrib\testrunner

# 匯入 platform
import platform

    def pop(self):
        result = ""
        for _ in xrange(self._queue.qsize()):
            try:
                result += self._queue.get_nowait()
            except Empty:
                pass
        # Author: Allan Ma
        # 判斷是否 Windows平臺
        if platform.system() == 'Windows':
            return result.decode('gbk')
        #
        return result.decode('UTF-8')

list,tuple和dict中出現的亂碼

這裡寫圖片描述

原始碼:unic.py
C:\Python27\Lib\site-packages\robot\utils

版本1:robotframework2.8.5

A. import json;
B. 找到程式碼塊:def _unic(item, *args),新增程式碼。

這裡寫圖片描述

版本2:robotframework3.0.2

A. import json;
B. 找到程式碼塊:def unic(item),新增程式碼。

這裡寫圖片描述

顯示正常中文字元

這裡寫圖片描述

console中出現的亂碼

這裡寫圖片描述

為什麼CMD會出現亂碼呢?這是因為我們寫的RIDE程式在Windows中預設是cp437編碼,通過RIDE編譯後,也是編譯為cp437編碼,而這時cmd是通過cp936進行解析的,所以會出現中文亂碼。

這裡寫圖片描述

版本1:robotframework2.8.5

這裡寫圖片描述

解決方法:

${err}	Evaluate	str('${result.stderr}').decode('cp936')

這裡寫圖片描述

版本2:robotframework3.0.2

原始碼:encodingsniffer.py
C:\Python27\Lib\site-packages\robot\utils

這裡寫圖片描述

顯示正常中文字元

這裡寫圖片描述

五、用json處理完list,tuple和dict中亂碼之後產生的問題:無法以列表,元組和字典的方式讀取資料

資料驅動:從CSV檔案中讀取資料。但是,通過json轉換後,dict變成str。無法以字典的方式讀取。

這裡寫圖片描述

關鍵字:Read CSV File

這裡寫圖片描述

關鍵字:unic處理編碼問題。return item中的資料是str。

這裡寫圖片描述

新增json.loads()方法處理

這裡寫圖片描述

原理:
json.dumps : dict轉成str
json.loads : str轉成dict

PS:不要把 json.dumps & json.loads 和 json.dump & json.load 搞混了。
json.dumps:把python資料儲存為json。
json.load:從檔案中讀取json資料。

相關推薦

RobotFramework環境配置中文日誌亂碼問題

中文日誌亂碼問題 一、編碼支援 . ASCII編碼:美國資訊交換標準程式碼(American Standard Code for InformationInterchange,簡稱ASCII)是一種用於資訊交換的美國標準程式碼,它的作用是給英文字母、數字、標點、

Robotframework環境搭建六設定日誌目錄

設定日誌目錄 A. 改變日誌的根目錄:testrunner.py B. 建立用例目錄:Create Log Path 一、修改RIDE原始碼:testrunner.py 日誌根目錄結構: RIDE中的專案預設: 開啟C:\Pyth

RobotFramework環境配置多瀏覽器相容性測試(Grid Server)

多瀏覽器相容性測試(Grid Server) A. 測試電腦連線到Grid Server (HUB)之後,獲得一個Session並註冊到目標的(target)Node。 B. 當測試電腦與HUB通訊時,需要通過註冊到Node的Session

RobotFramework環境配置資料驅動(總結)

資料驅動(總結) RIDE提供的庫: 自定義庫:DataCenter.py 一、資料驅動測試 注重於測試軟體的功能性需求,也即資料驅動測試執行程式所有功能需求的輸入條件。 二、總結:根據資料來源,靈活地實現KISS。 資料較少 資料比較

太陽能開發環境配置(一)SQL Server 2008R2

連接 重新 錯誤 磁盤 庫文件 單擊 cnblogs 分享圖片 登陸 太陽能開發環境配置(一) 主要包括以下內容 [x] 1. SQL Server 2008R2安裝 [x] 2. 檢驗安裝是否正確 1. SQL Server 2008R2安裝 在SQL 2008 R

模組開發之nginx配置websocet支援多環境配置(五)

模組開發之nginx配置websocet支援多環境配置(十五) 文章目錄 前言 配置webpack的多環境配置 配置專案 生產環境`webpack.dev.config.js` 開發環境`webpack.prod.config

Java呼叫R環境配置問題Cannot find JRI native library!

Cannot find JRI native library! Please make sure that the JRI native library is in 

Java調用R環境配置問題Cannot find JRI native library!

properly setup long scrip bsp tar fin lang expec Cannot find JRI native library! Please make sure that the JRI native library is in a dir

OpenGL環境配置教程VS2012 + GLEW + GLFW + GLM

前言 最近入坑圖形學,打算從最基礎的OpenGL學起,http://www.opengl-tutorial.org/ 是一個不錯的OpenGL入門網站,教程程式碼的環境都配置好了,直接下載後CMake之後就能跑。現在手動在VS2012中把GLEW、GLFW、GLM配置一遍。 環境

Linux中文日誌亂碼

亂碼現象: 1. cat,tail 等命令檢視,正常; 2. vim 檢視時所有中文亂碼; 檢視: 1. vim 開啟專案中其他含中文的檔案,正常; 2.vim 中 set fileencoding 檢視1中檔案 ,結果為utf-8; 3.同2檢視異常檔案,結果為

環境配置Linux線上jdk安裝使用

檢視所有版本:yum -y list java 根據自己需要下載(此處自己使用1.8): yum -y install java-1.8.0-openjdk* 安裝完成可使用指令檢測:java -version檢測版本 java預設安裝位置:

docker應用輸出中文日誌亂碼,解決過程

用docker部署了一個tomcat應用,並以tomcat使用者執行,日誌輸出遇到中文就顯示 ? dockerfile中已經明確指定了語言的環境變數ENV LC_ALL zh_CN.utf8 進入容

mondrian schema檔案中文讀取亂碼並出錯 的解決

因為業務需要,需要能在schema檔案中使用中文,預設情況下, Mondrian對schema檔案中的中文字元讀取會出現亂碼,並導致MDX查詢錯誤,這個時候就需要對Mondrian的原始碼做些修改,所以在本地搭建了Mondrian3.5.0原始碼開發環境(這裡不再討論原始碼環境的搭建),排除編譯錯誤後打包Mo

記一次愚蠢的linux環境下 nginx apache2 中文路徑亂碼問題 mediawiki中文檔名亂碼

1 使用winscp登入檢視發現檔名稱是中文 沒亂碼配置nginx apache無論什麼都不行,統統亂碼 網上的各種方法都試了 什麼配置charset Lang 等等,都不行場景:把本地檔案通過winscp上傳還是中文這到底怎麼回事?於是編寫java 放伺服器上 列印檔名稱,

Robotframework環境搭建五Test Setup & Teardown

用例公共的Test Setup & Teardown 目的:對所有用例作公共資源的初始化、現場儲存和垃圾回收 一、Test Setup A. 改變日誌等級:Set Log L

Robotframework(1)配置基礎環境

如果 www. 配置基礎 pip安裝 圖片 基於 需要 配置 gravity 轉載:http://www.cnblogs.com/CCGGAAG/p/7800324.html 最近對Robotframework這款基於python的框架比較感興趣,於是想著來研究一下,下面我

CUDA學習日誌開發環境配置和學習資源

接觸CUDA的時間並不長,最開始是在cuda-convnet的程式碼中接觸CUDA程式碼,當時確實看的比較痛苦。最近得空,在圖書館借了本《GPU高效能程式設計 CUDA實戰》來看看,同時也整理一些部落

Git環境配置+VSCode中文亂碼問題

1.VSCode中文亂碼問題 (files.autoguessEncoding==>true) 2.Git環境配置(安裝完git,非預設路徑,在git.path中設定一下,最後記得在win的path裡面新增環境) git安裝路徑 Path配置(我的是Win10最新版本,你們的按照老

Ubuntu環境下 matplotlib 圖例中文亂碼

中文本文前提條件是 已經 安裝好 matplotlib , 至於 matplotlib 是什麽, 怎麽安裝, 本文不予介紹。 首先在 Windows 盤區下 找到 微軟雅黑 的字體文件: 其次,找到 matplotlab 字體庫 文件夾 或者 系統字體庫文件夾 matp

webpack漸入佳境系列一webpack環境配置與打包基礎【附帶各種 "坑" 與解決方案!持續更新中...】

utf 環境配置 lan 配置 要求 完全 需要 構建 樣式 首先介紹傳統模塊化開發的主流方案: 1.基與CMD的sea.js,玉伯提出的解決方案,據說原來京東團隊在使用。用時才定義,就近加載。最近在瀏覽seajs官方文檔時發現seajs的域名已經在轉賣,驚恐萬分之余又想