비 ASCII 문자가 10 진 코드 포인트로 이스케이프 된 행 당 하나의 문자열 파일이 있습니다. 한 예로 라인은 다음과 같습니다문자열에서 10 진수 이스케이프 처리
mj\\195\\164ger
내가
mjäger
생산이 문자열을 처리하고자하는
(이중 백 슬래시가 정확히 인쇄로 파일에 있습니다). 종래, 파이썬 16 진수가 아니라 파이썬은 디코딩 할 수 예를 들어, 위의 문자열을 mj\xc3\xa4ger
로 기록 될 것이다 진수 이스케이프 (보다 탈출 사용합니다.
>>> by=b'mj\xc3\xa4ger'
>>> by.decode('utf-8')
'mjäger'
파이썬 그러나, 바로 진수 이스케이프를 인식하지 못합니다
나는 제대로 진수 이스케이프를 생산하기 위해 문자열을 조작하는 방법을 쓴, 그러나이 탈출 자체가 내가 파이썬이 진수가 최종 문자열을 만들 이스케이프 처리 얻을 수있는 방법. 탈출인가?
import re
hexconst=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"]
escapes=re.compile(r"\\[0-9]{3}")
def dec2hex(matchobj):
dec=matchobj.group(0)
dec=int(dec[1:])
digit1=dec//16 #integer division
digit2=dec%16
hex="\\x" + hexconst[digit1] + hexconst[digit2]
return hex
line=r'mj\195\164ger'
print(escapes.sub(dec2hex,line)) #Outputs mj\xc3\xa4ger
위의 출력을 mj\xc3\xa4ger
에서 mjäger
으로 변환 할 때 누락 된 마지막 단계는 무엇입니까? 감사!
인쇄 (escapes.sub을 (DEC2HEX, 라인)) 출력 MJ \의 XC3의 \의 xa4ger을 제공하지만, MJ \\ XC3 \\ xa4ger 같이 가게의 기억. 나는 내 대답을 삭제할 것이고, 그것은 Tim과 비슷하다. – WKPlus