2014-03-31 4 views
1

SGVsbG8sIHdvcmxkIQ == Windows Server 용과 우분투 용으로 두 가지 스크립트를 작성해야합니다. 내 bash는 스크립트가 실행되는 경우, 설명하기 :Powershell ToBase64String과 Linux base64의 출력이 다릅니다

echo -n 'BASE64' | base64 

결과가 QkFTRTY0입니다. 내 PowerShell 스크립트가 실행되는 경우 :

[System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('BASE64')) 

결과는 QgBBAFMARQA2ADQA입니다. 중요한 PowerShell 문자열을 Linux에서 가져와야합니다. 누구나 왜이 차이점과 내 문제에 대한 해결책을 알 수 있습니까? 나는이 문제가 유닉스의 UTF-8 인코딩과 관련이 있다고 생각하지만 해결책을 찾을 수 없다. Linux에서 PowerShell 출력을 디코딩 할 수는 있지만 Linux에서 문자열을 인코딩 할 수없고 PowerShell과 동일한 결과를 얻을 수 없습니다. bash 솔루션이 최적이지만 C/C++ 코드 솔루션이나 가이드도 사용할 수 있습니다.

+0

'[System.Convert] :: ToBase64String ([System.Text.Encoding] :: UTF8.GetBytes ('BASE64'))'하면 어떻게 될까요? –

+0

@ScottChamberlain, 나는 리눅스에서'Unicode.GetBytes'와 같은 결과를 얻어야 만한다. – 1e100

+0

리눅스는 utf8을 사용하고 유니 코드를 강요하므로 두 개의 서로 다른 바이트 배열을 가지고 있기 때문에 같은 결과를 얻을 수 없습니다. 왜 UTF8.GetBytes를 사용하여 유니 코드 인코딩을 강요 할 필요가 있습니까? 올바른 결과를 반환합니다. –

답변

3

당신은 iconv를 사용해야합니다 :

$ echo -n 'BASE64' | iconv -f UTF8 -t UTF16LE | base64 
QgBBAFMARQA2ADQA 

UTF16LE이는 BOM을 생략됩니다.

https://superuser.com/q/381056/4206을 참조하십시오. 누군가 BOM을 강제로 포함하는 것을 묻지 만, 그 반대를 원한다면 편리하게 문제 될 것입니다.

+0

매력처럼 작동합니다. 나는 행복한 사람이다. – 1e100

+0

OSX 'iconv'에서 지원되는 인코딩 스위치는 'UTF-16LE'입니다. FWIW! –

관련 문제