2008-11-20 6 views
16

Base64으로 Unicode 문자를 인코딩하고 디코딩 할 수 있습니까?Base64ing 유니 코드 문자

나는 'اله'이라는 문자열을 인코딩하려고 시도했지만, 내가 그것을 모두 해독하면 '????'이 생겼다.

+0

가 무엇을의

byte[] decbuff; decbuff = Convert.FromBase64String(this.ToString()); string decoded = System.Text.Encoding.Unicode.GetString(decbuff); 
플랫폼 및 코드? 물론 대답은 '예'입니다. –

+0

데이터가 Delphi에서 인코딩되고 PHP에서 디코딩/사용되었습니다. – UnkwnTech

+0

죄송합니다. Delphi에 대한 단서가 없습니다. 하지만이 문제가 base64와 아무런 관련이 없음을 증명하는 답변을 제공했습니다. –

답변

17

Base64로는 텍스트로 변환합니다. 텍스트를 base64 형식으로 변환하려면 먼저 적절한 인코딩 (예 : UTF-8, UTF-16)을 사용하여 텍스트를 바이너리로 변환해야합니다.

+0

PHP로 작업한다면 어떻게합니까? – think123

+0

@ think123 : 어느 비트 요? 어쨌든 PHP를 알지는 못 하겠지만, 태스크를 비트로 나누면 검색을 통해 해답을 찾는데 도움이 될 것입니다. –

+0

주로 텍스트를 UTF-8을 사용하여 바이너리로 변환합니다. – think123

17

물론 가능합니다. 언어 또는 Base64 루틴이 유니 코드 입력을 처리하는 방법에 따라 다릅니다. 예를 들어 Python의 b64 루틴은 인코딩 된 문자열을 필요로합니다 (Base64는 텍스트에 대한 유니 코드 코드 포인트가 아닌 텍스트를 이진 코드로 인코딩합니다).

Python 2.5.1 (r251:54863, Jul 31 2008, 22:53:39) 
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a = 'ûñö' 
>>> import base64 
>>> base64.b64encode(a) 
'w7vDscO2' 
>>> base64.b64decode('w7vDscO2') 
'\xc3\xbb\xc3\xb1\xc3\xb6' 
>>> print '\xc3\xbb\xc3\xb1\xc3\xb6' 
ûñö 
>>>  
>>> u'üñô' 
u'\xfc\xf1\xf4' 
>>> base64.b64encode(u'\xfc\xf1\xf4') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.5/base64.py", line 53, in b64encode 
    encoded = binascii.b2a_base64(s)[:-1] 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 
0-2: ordinal not in range(128) 
>>> base64.b64encode(u'\xfc\xf1\xf4'.encode('utf-8')) 
'w7zDscO0' 
>>> base64.b64decode('w7zDscO0') 
'\xc3\xbc\xc3\xb1\xc3\xb4' 
>>> print base64.b64decode('w7zDscO0') 
üñô 
>>> a = 'الله' 
>>> a 
'\xd8\xa7\xd9\x84\xd9\x84\xd9\x87' 
>>> base64.b64encode(a) 
'2KfZhNmE2Yc=' 
>>> b = base64.b64encode(a) 
>>> print base64.b64decode(b) 
الله 
+1

+1의 경우 –

+4

반환되는 문자열은 유니 코드 개체가 아닙니다. 이 코드는 다음과 같이 디코딩되어야합니다. c = base64.b64decode (b) .decode ('utf-8') – DanJ

1

사용중인 언어를 지정하지 않았지만 문자열을 바이트 배열로 변환 한 다음 (선택한 언어로 완료 되었음) 바이트 배열을 base64로 인코딩 해보십시오.

byte[] encbuf; 

encbuf = System.Text.Encoding.Unicode.GetBytes(input); 
string encoded = Convert.ToBase64String(encbuf); 
을 ... 그리고 디코딩 :

1

.NET에서이 (인코딩)을 시도 할 수 있습니다

이 가 그것은 Base64로 루틴이 데이터를 잡는 방법에 따라 달라