py2下hbase的字符串編碼問(wèn)題(\\xe7\\xbc\\x96)

py2下hbase的字符串編碼問(wèn)題(\xe7\xbc\x96)

最近在py2的環(huán)境下使用hbase裸扶,遇到了一個(gè)令人惱火的編碼問(wèn)題肤无。問(wèn)題字符串如下:

'\\XE6\\X89\\X80\\XE8\\XB0\\X93\\XE7\\X89\\XB9\\XE6\\XAE\\X8A\\XE5\\XAD\\X97\\XE7\\XAC\\XA6\\XEF\\XBC\\X8C\\XE5\\XB0\\XB1\\XE6\\X98\\XAF\\XE4\\XB8\\X80\\XE4\\XBA\\X9B\\XE6\\X9C\\X89\\XE7\\X89\\XB9\\XE6\\XAE\\X8A\\XE5\\X90\\XAB\\XE4\\XB9\\X89\\XE7\\X9A\\X84\\XE5\\XAD\\X97\\XE7\\XAC\\XA6\\X0D\\X0A2.\\XE5\\XAE\\X9A\\XE4\\XBD\\X8D\\XE7\\XAC\\XA6\\XE4\\XBD\\XBF\\XE6\\X82\\XA8\\XE8\\X83\\XBD\\XE5\\XA4\\X9F\\XE5\\XB0\\X86\\XE6\\XAD\\XA3\\XE5\\X88\\X99\\XE8\\XA1\\XA8\\XE8\\XBE\\XBE\\XE5\\XBC\\X8F\\XE5\\X9B\\XBA\\XE5\\XAE\\X9A\\XE5\\X88\\XB0\\XE8\\XA1\\X8C\\XE9\\XA6\\X96\\XE6\\X88\\X96\\XE8\\XA1\\X8C\\XE5\\XB0\\XBE\\XE3\\X80\\X82'

這是一段utf-8編碼后的字符串超凳,由三個(gè)字節(jié)組成一個(gè)中文。

比較坑的地方是在它每個(gè)字節(jié)碼前的雙反斜杠\\

一開(kāi)始,我希望將它的反斜杠去掉一個(gè),然后就可以交給py自己來(lái)處理了取募,然而由于反斜杠的轉(zhuǎn)義,嘗試了多種方式蟆技,未果玩敏。(難受.jpg)

在查詢了網(wǎng)上的一些處理方法后,發(fā)現(xiàn)基本都是按照三個(gè)字節(jié)來(lái)取质礼,然后做轉(zhuǎn)碼旺聚。

但是這里存在的幾個(gè)坑:

  1. 這段字符串中包含英文與數(shù)字,它們?cè)诶锩媸侵苯觾?chǔ)存的几苍,并沒(méi)有被編碼翻屈。
  2. \r \n這類的特殊字符是單個(gè)字節(jié)儲(chǔ)存的,必須區(qū)分出來(lái)妻坝。

于是伸眶,只好使用我覺(jué)得比較蠢但又無(wú)可奈何的辦法,思路如下:

  1. 使用正則刽宪,按照三個(gè)字節(jié)取出
  2. 轉(zhuǎn)換中文編碼后替換原字符串
  3. 處理特殊字符的編碼

將這兩個(gè)坑給填了后厘贼,代碼如下:

import re

rule = "\\\\X\w{2}\\\\X\w{2}\\\\X\w{2}"
words = re.findall(rule, var)
for t in words:
    new_txt = t.replace('\\X', '').decode('hex')
    var = var.replace(t, new_txt)
var = var.replace('\\X0D', '\r').replace('\\X0A', '\n').replace('\\X09', '\t')

這段代碼比較簡(jiǎn)單:
rule 是正則的提取規(guī)則,按照三個(gè)字節(jié)提取圣拄,去除可能存在的單字節(jié)特殊字符
var 是需要處理的字符串
new_txt 是我們需要的中文
第7行 是使用中文替換掉原始的字節(jié)碼
第8行 是處理可能存在的指標(biāo)符

使用這段代碼轉(zhuǎn)換上文的那段字符后嘴秸,得到的結(jié)果如下:

所謂特殊字符,就是一些有特殊含義的字符
2.定位符使您能夠?qū)⒄齽t表達(dá)式固定到行首或行尾庇谆。

需求基本滿足了岳掐,不過(guò)需要注意的是,這里依然存在幾個(gè)問(wèn)題:

  1. 這段代碼不兼容py3饭耳。它的運(yùn)行環(huán)境為py2串述,py3下運(yùn)行是會(huì)報(bào)錯(cuò)的。原因還是在于他們對(duì)字符串編碼的默認(rèn)處理方式不同寞肖。
  2. 沒(méi)有考慮大小寫(xiě)纲酗。 這里對(duì)字節(jié)碼的替換規(guī)則默認(rèn)為替換大寫(xiě)的衰腌,實(shí)際中,它可能存在小寫(xiě)的情況觅赊。
  3. 特殊字符右蕊。 這里只對(duì)常見(jiàn)的\r \n \t進(jìn)行了處理,實(shí)際中吮螺,還可能存在\f \v等的情況饶囚。

這里留下了幾個(gè)bug… 有點(diǎn)慚愧,不過(guò)正所謂前人挖坑后人填鸠补。

處理的方式其實(shí)也不難坯约,第2點(diǎn),使用正則來(lái)代替replace莫鸭,第3點(diǎn)闹丐,增加\f \v 的處理即可,基本不用修改太多被因。第1點(diǎn)的話卿拴,則可能需要一點(diǎn)時(shí)間針對(duì)py3下的進(jìn)行改寫(xiě)了,不過(guò)問(wèn)題也不大梨与。
:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末堕花,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子粥鞋,更是在濱河造成了極大的恐慌缘挽,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呻粹,死亡現(xiàn)場(chǎng)離奇詭異壕曼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)等浊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)腮郊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人筹燕,你說(shuō)我怎么就攤上這事轧飞。” “怎么了撒踪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵过咬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我制妄,道長(zhǎng)掸绞,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任忍捡,我火速辦了婚禮集漾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砸脊。我一直安慰自己具篇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布凌埂。 她就那樣靜靜地躺著驱显,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瞳抓。 梳的紋絲不亂的頭發(fā)上埃疫,一...
    開(kāi)封第一講書(shū)人閱讀 52,807評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音孩哑,去河邊找鬼栓霜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛横蜒,可吹牛的內(nèi)容都是我干的胳蛮。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼丛晌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仅炊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起澎蛛,我...
    開(kāi)封第一講書(shū)人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤抚垄,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后谋逻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體呆馁,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年毁兆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了智哀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荧恍,死狀恐怖瓷叫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情送巡,我是刑警寧澤摹菠,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站骗爆,受9級(jí)特大地震影響次氨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜摘投,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一煮寡、第九天 我趴在偏房一處隱蔽的房頂上張望虹蓄。 院中可真熱鬧,春花似錦幸撕、人聲如沸薇组。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)律胀。三九已至,卻和暖如春貌矿,著一層夾襖步出監(jiān)牢的瞬間炭菌,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工逛漫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留黑低,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓酌毡,卻偏偏與公主長(zhǎng)得像投储,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子阔馋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面呕寝,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí)勋眯,c語(yǔ)言,java語(yǔ)言下梢,單片機(jī)的匯編語(yǔ)言等客蹋;大學(xué)畢...
    oceanfive閱讀 3,095評(píng)論 0 7
  • 字符是用戶可以讀寫(xiě)的最小單位讶坯。計(jì)算機(jī)所能支持的字符組成的集合,就叫做字符集岗屏。字符集通常以二維表的形式存在辆琅。二維表的...
    劉惜有閱讀 8,131評(píng)論 2 14
  • 第一部分 Python基礎(chǔ)篇(80題) 1、為什么學(xué)習(xí)Python这刷? Python相對(duì)于其他編程語(yǔ)言有很多優(yōu)點(diǎn): ...
    清清子衿木子水心閱讀 1,717評(píng)論 0 1
  • 編碼問(wèn)題一直困擾著開(kāi)發(fā)人員婉烟,尤其在 Java 中更加明顯,因?yàn)?Java 是跨平臺(tái)語(yǔ)言暇屋,不同平臺(tái)之間編碼之間的切換...
    x360閱讀 2,483評(píng)論 1 20
  • 推薦理由 簡(jiǎn)潔的辨析似袁,改變是互動(dòng)的。 善惡臨界點(diǎn)的把握, 當(dāng)以社會(huì)秩序的公認(rèn)為標(biāo)準(zhǔn) 如斯昙衅,也相對(duì)爾 原文
    刀子豆腐閱讀 162評(píng)論 0 0