解码base64字符串在JS中不起作用,适用于Linux'base64

时间:2017-07-10 08:29:08

标签: javascript base64 decoding

我有一个Playready DRM清单,并从中提取base64编码的标头,这部分工作正常。

但是,当我尝试通过atob或此处提供的其他一个复制粘贴实现解码Javascript(客户端)中的字符串时,每个预期字符之间都有一个空白的缺失字符平方

如果我将编码的字符串传送到终端中的base64 --decode,我会得到预期的输出。

Base64编码字符串:0gIAAAEAAQDIAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AMQBpAHQASAAyAFIAaQAwAHMAawBXAC8AVgA3AHUAZwBZAGgALwA0AGgAZwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBoAHUANgBOAFMAZABnADQAWAAyAFUAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAHMAdABhAGcAaQBuAGcALgBkAHIAbQB0AG8AZABhAHkALgBjAG8AbQAvAGwAaQBjAGUAbgBzAGUALQBwAHIAbwB4AHkALQBoAGUAYQBkAGUAcgBhAHUAdABoAC8AZAByAG0AdABvAGQAYQB5AC8AUgBpAGcAaAB0AHMATQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPAAvAEwAQQBfAFUAUgBMAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=

base64 -decode输出:��<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0"><DATA><PROTECTINFO><KEYLEN>16</KEYLEN><ALGID>AESCTR</ALGID></PROTECTINFO><KID>1itH2Ri0skW/V7ugYh/4hg==</KID><CHECKSUM>hu6NSdg4X2U=</CHECKSUM><LA_URL>https://lic.staging.drmtoday.com/license-proxy-headerauth/drmtoday/RightsManager.asmx</LA_URL></DATA></WRMHEADER>

Javascript输出:҂����Ȃ<�W�R�M�H�E�A�D�E�R� �x�m�l�n�s�=�"�h�t�t�p�:�/�/�s�c�h�e�m�a�s�.�m�i�c�r�o�s�o�f�t�.�c�o�m�/�D�R�M�/�2�0�0�7�/�0�3�/�P�l�a�y�R�e�a�d�y�H�e�a�d�e�r�"� �v�e�r�s�i�o�n�=�"�4�.�0�.�0�.�0�"�>�<�D�A�T�A�>�<�P�R�O�T�E�C�T�I�N�F�O�>�<�K�E�Y�L�E�N�>�1�6�<�/�K�E�Y�L�E�N�>�<�A�L�G�I�D�>�A�E�S�C�T�R�<�/�A�L�G�I�D�>�<�/�P�R�O�T�E�C�T�I�N�F�O�>�<�K�I�D�>�1�i�t�H�2�R�i�0�s�k�W�/�V�7�u�g�Y�h�/�4�h�g�=�=�<�/�K�I�D�>�<�C�H�E�C�K�S�U�M�>�h�u�6�N�S�d�g�4�X�2�U�=�<�/�C�H�E�C�K�S�U�M�>�<�L�A�_�U�R�L�>�h�t�t�p�s�:�/�/�l�i�c�.�s�t�a�g�i�n�g�.�d�r�m�t�o�d�a�y�.�c�o�m�/�l�i�c�e�n�s�e�-�p�r�o�x�y�-�h�e�a�d�e�r�a�u�t�h�/�d�r�m�t�o�d�a�y�/�R�i�g�h�t�s�M�a�n�a�g�e�r�.�a�s�m�x�<�/�L�A�_�U�R�L�>�<�/�D�A�T�A�>�<�/�W�R�M�H�E�A�D�E�R�>�

有谁知道为什么会这样或者如何解决这个问题?我认为这是字符集,但尝试其他人会产生类似的结果。

修改
SO已正确显示 Javascript输出字符串(即它应该如何在我的程序中)所以也许我没有正确地逃避它或什么?以下是我第一次粘贴时编辑器向我展示的内容:JS Output

编辑2 在第一次编辑之后,SO现在再次显示了奇怪的角色......

1 个答案:

答案 0 :(得分:2)

您的数据似乎是使用BOM编码的UTF-16。 使用UTF-16 to UTF-8 conversion in JavaScript中的功能,您可以使用

以UTF-8 / ASCII格式获取数据
decodeUTF16LE(atob(yourString)).slice(5) // .slice(5) = remove BOM