2012-07-19 71 views
0

我整天工作,沒有結果將整數轉換爲Python 3.2中形式爲「\ x ..」的字符串。當使用ascii轉換或其他我得到'0x ..'或'\\ x ..'時,這不適合我。 任何字節或加法運算結果與的unicode(「\ U92」)Python unicodeescape問題

>>>bytes([92]) 
b'\\' 

>>>chr(92) + "x" + str(42) 
'\\x42' 

>>> str(hex(66)) 
'0x42' 

>>>ascii(bytes([255])).replace(r"'b\", "") 
File "<stdin>", line 1 
    ascii(bytes([255])).replace(r"'b\", "") 
            ^
SyntaxError: invalid syntax 

>>> "\x".encode('raw_unicode_escape').decode('ascii') 
    File "<stdin>", line 1 
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: end of string in escape sequence 
「語法錯誤:在轉義序列字符串的結尾:(UNICODE錯誤)‘unicodeescape’編解碼器不能在0-2位置解碼字節」
+1

請給你想要的輸入和輸出的例子。從你的文章中很難判斷你想要做什麼。你是說你想從42號變成「\ x42」嗎? – BrenBarn 2012-07-19 00:11:58

+0

如果你想要的是''\ x42'',那麼這將被打印爲'B',因爲它們是同一件事。 – MRAB 2012-07-19 00:44:41

+1

它只是我必須創建表示符號的字符串的機制的一部分,我相信下面的代碼是一個解決方案。 my_data = str(「0a」)#example (chr(92)+「x」+ my_data).encode(「utf8」)。decode('unicode-escape') – user1536379 2012-07-19 01:40:55

回答

0

我很難讀到這個問題,但我相信這就是你想要做的。

>>> aString = str('\\') + str(42) 
>>> print aString 
\42 

,如果你需要的x \

>>> aString = str('\\') + 'x' + str(42) 
>>> print aString 
\x42 
0

注意,在ascii(bytes([255])).replace(r"'b\", ""),在\b後逃脫以下",這導致SyntaxError後。

嘗試逃脫\

>>>ascii(bytes([255])).replace(r"'b\\", "") 
+0

您再次發佈了相同的代碼。你是否想要添加另一個反斜槓? – BrenBarn 2012-07-19 00:45:36

+0

@BrenBarn感謝您指出,只是一個編輯問題。 – satoru 2012-07-19 00:49:57

+0

我知道,但把雙斜槓產生一些奇怪的結果。我認爲 (chr(92)+「x」+ my_data).encode(「utf8」)。decode('unicode-escape') 應該可以解決我的問題。 – user1536379 2012-07-19 01:44:14

0
>>> chr(92) 
'\\' 

結果顯示2條斜線,但是字符串真的只包含一個。這就是字符串顯示的方式。如果你print它你會看到它真正包含。

>>> r"'b\" 
SyntaxError: EOL while scanning string literal 

原始字符串不允許用\來結束,這樣\可以用來逃生的字符串中間的報價。不知道我同意Python的設計,這方面,但更多的信息可以在Why can't Python's raw string literals end with a single backslash?

>>> "\x" 
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: end of string in escape sequence 

發現你開始將其十六進制數標識字符轉義序列,但沒有用六角遵循它數。

上點#1的後續行動,這也許解釋了你的困惑:

>>> chr(92) + "x" + str(42) 
'\\x42' 
>>> print(chr(92) + "x" + str(42)) 
\x42 
+0

Re'r「'b \'',一個原始字符串不能以一個反斜槓結束,因爲反斜槓'逃脫'''',儘管它也包含在字符串中,所以'r」'b \「」 '打印爲''b \''。 – MRAB 2012-07-19 00:42:11

+0

@MRAB,謝謝。找到一個確切的鏈接並將其添加到答案中。 – 2012-07-19 01:02:27

2

Oy公司合租...

>>> b'\\x42'.decode('unicode-escape') 
'B' 
+0

Thabk你。我相信這正是我所期待的。 – user1536379 2012-07-19 01:42:01

+0

+1爲你的閱讀能力,他們比我更好。 – 2012-07-19 01:52:58