Having difficulties decoding a base64 string in JavaScript? Try using Linux's base64 command!

I have successfully extracted the base64 encoded header from a Playready DRM manifest.

However, I am encountering an issue when trying to decode the string in Javascript using methods like atob. There seems to be a missing character square between each expected character.

Interestingly, decoding the encoded string with the command base64 --decode in a terminal gives me the correct output.

Encoded String:

0gIAAAEAAQ... (omitted for brevity) ...UEA+

base64 -decode Output:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/...

Javascript Decoding Output: ҂Ȃ<WRMHEADER xmlns="ht...

Does anyone know why this discrepancy is happening or how it can be resolved? It appears to be related to the character set being used, but switching to other sets does not solve the issue.

EDIT
It seems that the Javascript output string is displayed correctly here on SO, indicating no issue within my program. Could there be a problem with escaping characters properly? When pasting directly into the editor, it showed up differently: https://i.sstatic.net/LuSim.png

EDIT 2
After the first edit, some strange characters are appearing again on SO.

Answer №1

It appears that your data may be encoded in UTF-16 with a Byte Order Mark (BOM). By utilizing the method discovered in this Stack Overflow post, you can potentially convert your data to UTF-8 or ASCII by executing the following:

decodeUTF16LE(atob(yourString)).slice(5) // .slice(5) = remove BOM

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Switch between using the useState hook by toggling it with the MUI Switch

Looking to implement a custom Dark Mode feature for a specific element on my create-react-app website using MUI. I have successfully implemented the Switch to change the state on toggle, but I am having trouble figuring out how to toggle it back and fort ...

Manipulate the inner HTML of a ul element by targeting its li and a child elements using JQuery

Here is the HTML code I am working with: <ul class="links main-menu"> <li class="menu-385 active-trail first active"><a class="active" title="" href="/caribootrunk/">HOME</a></li> <li class="menu-386 active"> ...

End event in NodeJS response does not activate

I'm encountering an issue with sending the response data to the client. The response is not being sent and the 'end' event is not triggered. I'm at a loss on how to resolve this issue. My objective is to send the retrieved data from red ...

Use jQuery UI draggable to create a clone with a shadow effect

Attempting to replicate this: This is what I have for the draggable element: $( function() { $('#sidebar .question-constructor').draggable({ connectToSortable:'#preview', scroll: false, helper : 'clone ...

The issue with json arises when utilizing $.ajax without the definition$

Attempting to make this code work properly Javascript $.ajax({ url: '/endpoint/json/', //Update the path to your JSON file. type: "post", dataType: "json", //Remove the "data" attribute if not needed. data: { ...

Understanding the reading of Java Class List in Vue Js

As a beginner in Front-end development, I am trying to figure out how I can use Vue.js to read a Java class List. Specifically, I have a Java class that includes a list of fruits and I want to be able to display this list on the UI using Vue.js: public c ...

Merge data from api into visual charts using Google Chart Library

I received an API response with the following data structure: { "status": 200, "message": "OK", "data": [ { "_id": { "report_type": "robbery" }, "report_type": "robbery", "Counts": 11 }, { "_id": { "repo ...

Error: Unable to process reduction on ships - function "reduce" is not functional

I created a boat visualization tool using a specific API. The API responds with a JSON that I then inject into a table. The issue: At times during the day, I observed the application would abruptly stop functioning and throw an error: Unhandled Rejection ...

Tips for migrating an AngularJS application to Angular

My current project involves implementing a basic search function using AngularJS (link). I want to integrate this feature into an existing Angular application. To do this, I created a new Angular app and transferred the view to app.component.html. <hea ...

Creating a hexagonal grid pattern with the use of texture

I have conducted several experiments in the past to determine the most effective way to create large-scale hexagon grids. I attempted drawing the hexagons using THREE.Line and THREE.LineSegments. While this method was successful for small grids, the perfo ...

Transmitting a plethora of information using jQuery

Here's the code I currently have for sending data: var test={imagename:"apple.jpg",x:"13",y:"33"}; $.ajax({ type: "POST", url: "some.php", data: test, success: function(response){ console.log(response); } }); ...

Find the line containing the selected text within a JavaScript code

I am working on a contentEditable div where users can enter multi-line text. I need to be able to inspect the line that the user is currently typing in when they press enter. Is there a way to retrieve the context of that specific line (or all lines)? Is ...

What is the function of the next and back buttons in AngularJS?

I need assistance with creating next and previous buttons in Angular. As I am new to programming, I have written a program that works when using a custom array $scope.data = []. However, it doesn't work when I use $http and I would appreciate any help ...

Waveform rendering in HTML5 using wavesurfer.js struggles to handle large mp3 files

Recently, I was considering incorporating wavesurfer.js into one of my projects so I decided to explore the demo on To test it out, I uploaded a large mp3 file (approximately 2 hours long) onto the designated area in the middle of the page. It appeared to ...

Struggling with using flexboxes and creating animated elements

Seeking assistance with animating the search bar on a website project. The animation is functioning, but the search input abruptly moves when the animation starts, as shown in this GIF: https://i.sstatic.net/17sFl.gif I am utilizing jQuery for the animat ...

Dealing with numerous identical ajax requests in jQuery

With 5 text fields where various amounts are entered, I utilize AJAX calls for calculations based on these values. The issue arises when the same AJAX call is repeated each time a user types in order to determine the total amount. The problem lies in the ...

A novel way to enhance a class: a decorator that incorporates the “identify” class method, enabling the retrieval

I have been given the task to implement a class decorator that adds an "identify" class method. This method should return the class name along with the information passed in the decorator. Let me provide you with an example: typescript @identity(' ...

Utilizing JavaScript and its scope to include text within an HTML document

I am currently working on a program that receives input from the user twice, specifically a risk carrier and a sum (although it is just a placeholder for now), groups these two values together, and then repeats the contents in a loop. You can see the progr ...

Preventing duplicate submissions with an onclick button: Here's how

processApproval = (item) => { const {approve} = this.state; let {errors} = this.state; if (!isUndefined(approve.text)){ if (approve.text.length > 0){ this.setState({loading: true}); ...

Using the JavaScript moment library, you can easily convert a value into seconds

Could moment.js be used to format var timeValue = '65' into 01:05? While easier to format as ('HH:MM:SS'), passing a variable as 65 and converting it into ('mm:ss') results in '01:00' instead of '01:05'. C ...