1. 程式人生 > >python2.*中文字串比較問題

python2.*中文字串比較問題

1.環境

    python版本:Python 2.7.5

2.問題描述

       從檔案中讀取了文字直想和固定的字串比較,文字值看上去一樣,但是比較結果是False

3.問題程式碼

    
#coding=utf-8

filePath = './test.txt'
testStr = '紅糖部落格'
with open(filePath,'r') as msgfile:
        for item in msgfile:
                if item == testStr:
                        print('ok')
                print(item)
    上面程式碼的輸出結果:
紅糖部落格
    並沒有輸出ok,這個其實和python2.*的預設的編碼格式有關係,下面這段話很重要

    在Python2中,普通字串是以8位ASCII碼進行儲存的,而Unicode字串則儲存為16位unicode字串,這樣能夠表示更多的字符集。使用的語法是在字串前面加上字首 u。    在Python3中,所有的字串都是Unicode字串。

4.解決方案:

#coding=utf-8

filePath = './test.txt'
testStr = '紅糖部落格'
with open(filePath,'r') as msgfile:
        for item in msgfile:
                if item.strip().decode('utf-8') == testStr.decode('utf-8'):
                        print('ok')
                print(item)

    ok正常輸出!!

相關推薦

python2.*中文字串比較問題

1.環境    python版本:Python 2.7.52.問題描述       從檔案中讀取了文字直想和固定的字串比較,文字值看上去一樣,但是比較結果是False3.問題程式碼    #coding

Java比較中文字串--振興中華

標題: 振興中華     小明參加了學校的趣味運動會,其中的一個專案是:跳格子。     地上畫著一些格子,每個格子裡寫一個字,如下所示:(也可參見p1.jpg) 從我做起振 我做起振興 做起振興中 起振興中華     比賽時,先站在左上角的寫著“從”字的格子裡,可以橫向

python2和python3比較好的共存方法

python3 col 很多 和數 由於 log 多人 naconda packages 文章根據網絡資料編寫,只為個人學習使用。青山。。。 ---------------------------------------------------- 由於工作學習的需求,大家都

String類(物件例項化、字串比較、物件池、字串常量不可變更)

String的兩種例項化方式 直接賦值和傳統例項化: public class Stringob { public static void main(String[] args) { String str1="hello"; //直接賦值 str是一個物

C語言--字串拷貝、字串查詢、字串比較字串擷取

 在實際的應用當中,字元和字串的操作是最常用的技能。總結下來,提升能力。 一、字串拷貝 1、memcpy 2、strcpy 區別 二、字串查詢 三、字串比較 四、字串擷取 1、一種簡單而又機智的方法–strncpy  strncpy函

Java中字串比較方法equals()和equalsIgnoreCase()的區別

1. equals() equals( )是比較兩個字串是否相等,它的一般表示式如下: /** * Compares this string to the specified object. The result is {@code * true} if and o

處理中文字串的函式

處理中文字串的函式 <%!public String codeToString(String str) {//處理中文字串的函式 String s = str; try { byte tempB[] = s.getBytes("ISO-8859-1"); s = new

Mysql中文字串提取datetime

DATE_FORMAT無法用於提取含中文字元的時間字串中的時間, 可以通過STR_TO_DATE來提取其中的資訊, 如下: SELECT STR_TO_DATE("2018年11月05日 15:00:00","%Y年%m月%d日 %H:%i:%S"); 結果: 參考: https://dev.my

String類的equals是如何進行字串比較

public static void main(String[] args) { String a = new String("abc"); String b = new String("abc"); System.out.prin

在處理中文字串的時候,如何處理�這個字元

首先需要明白�這個字元是什麼意思,是怎麼產生的 解釋:從某編碼向Unicode編碼轉化時,如果沒有對應的字元,得到的將是Unicode的程式碼“\uffffd”,也就是�這個字元。 比如:伺服器端用GB2312對響應的資料進行編碼,而接收端使用預設UTF-8編碼接收是對應不上的,就會出現

jquery使用$(xx).text()與字串比較,明明看著相等,結果卻為false

比如一個a標籤。 <a>刪除</a> 使用jquery獲取之,$('a').text()。var res = ($('a').text() == '刪除');alert(res);。結果為false。 可能是有的瀏覽器會在text中給文字加空格。使用trim(

myBatis sql中字串比較

使用myBatis框架,編寫sql文時,有時會用字元和傳入引數的比較,使用‘==’或者‘!=’有時起不到作用,主要是使用的方法不正確。 方法1: 外層為雙引號,內部的字元為單引號,需要將字元轉換為String <if test="authNo=='2'.toString() "

C# 字串比較效率測試

這裡用String比較的靜態方法public static int Compare(String strA, String strB, StringComparison comparisonType);來測試不同的StringComparison的效率 直接上程式碼: using S

不區分大小的字串比較

在程式碼中碰到的 ​ if (_tcsicmp(lpszNormal, lpszSel) == 0) { m_bSelected = true; } else { m_bSelected = false; } ​ 引數: lpszNormal, lpszSel:為CStr

JAVA——特殊類(1)——String類(3)——字串比較(方法)

(二)字串比較 (1)比較字串是否相等——區分大小寫——返回值為Boolean型 public boolean equals(Object anObject) //anObject——傳入需要被比較的物件 //此方法區分大小寫 (2)比較字串是否相

Shell中字串比較忽略大小寫的問題

兩個字串,要比較忽略大小寫後是否相等的問題,可以有很多種方法。 方法一: 藉助tr命令來處理 #!/bin/bash name1="TOm" name2="tom" temp1=$(echo $name1 | tr [a-z] [A-Z]) # 將name1全部轉變成大寫再做比較

1121: 習題8-17 字串比較

題目描述 自己寫一個函式實現字串比較,指定函式原型如下: int StrCmp(char *s1, char * s2); 若s1和s2完全一樣,則返回0,否則返回二者第一個不同字元的ASCII碼的差值(如"BOY"和"BAD",第一個字元一樣,則比較第二個字元,第二個字元'O'

專案開發感悟——字串比較

最近專案中用到了字串比較,要求省份--城市--區域與地址做對比,如果地址包含區域的字串就返回true. 我的實現方式是打算用將兩個字串每一個字元進行比較,直到省份--城市--區域遍歷完畢。 這麼做問題的確是解決了,但是我想到String類庫裡面indexOf是能解決了,但是我也不甘於僅僅是使

PHP中文處理 中文字串擷取(mb_substr)和獲取中文字串字數

一、中文擷取:mb_substr()  mb_substr( $str, $start, $length, $encoding )  $str,需要截斷的字串  $start,截斷開始處,起始處為0  $length,要擷取的字數  $encodin

c++ premier Plus書之for, while迴圈, 逗號運算子, 字串比較

// for迴圈 #include "iostream" const int arSize = 16; int main() { using std::cout; using std::endl; long long factorials[arSize]; factorials[0] =