B window.atob a phân tích
ExampleDecode a base-64 encoded string: Show let text = "Hello World!"; Try it Yourself » Definition and UsageThe NoteThe See Also:The btoa() Method. SyntaxParameters
Return Value
Browser Support
Vấn đề UnicodeMặc dù JavaScript (ECMAScript) đã trưởng thành, sự mong manh của mã hóa Base64, ASCII và Unicode đã gây ra rất nhiều vấn đề đau đầu (phần lớn là trong lịch sử của câu hỏi này). Hãy xem xét ví dụ sau:
Tại sao chúng ta gặp phải điều này?
Nguồn: MDN (2021) Bài báo MDN ban đầu cũng đề cập đến bản chất bị hỏng của
Giải pháp với khả năng tương tác nhị phân(Tiếp tục cuộn để tìm giải pháp ASCII base64) Nguồn: MDN (2021) Giải pháp được đề xuất bởi MDN là thực sự mã hóa đến và từ một biểu diễn chuỗi nhị phân: Mã hóa UTF8 ⇢ binary
Giải mã nhị phân ⇢ UTF-8
Trường hợp điều này không thành công một chút, là bạn sẽ nhận thấy chuỗi được mã hóa Giải pháp với khả năng tương tác ASCII base64Toàn bộ lịch sử của câu hỏi này chỉ ra có bao nhiêu cách khác nhau mà chúng tôi đã phải giải quyết các hệ thống mã hóa bị hỏng trong nhiều năm. Mặc dù bài báo MDN ban đầu không còn tồn tại, giải pháp này vẫn được cho là giải pháp tốt hơn và thực hiện rất tốt việc giải quyết "Vấn đề Unicode" trong khi vẫn duy trì các chuỗi base64 văn bản thuần túy mà bạn có thể giải mã trên base64decode.org . Có hai phương pháp khả thi để giải quyết vấn đề này:
Lưu ý về các giải pháp trước đây: bài viết MDN ban
đầu đề xuất sử dụng Nếu bạn đang cố gắng tiết kiệm thời gian cho mình, bạn cũng có thể cân nhắc sử dụng thư viện:
Mã hóa UTF8 ⇢ base64
Giải mã base64 ⇢ UTF8
(Tại sao chúng ta cần làm điều này? Thêm Hỗ trợ TypeScriptĐây là giải pháp tương tự với một số khả năng tương thích TypeScript bổ sung (thông qua @ MA-Maddin):
Giải pháp đầu tiên (không được dùng nữa)Điều này đã được sử dụng
Và một điều cuối cùng: Lần đầu tiên tôi gặp sự cố này khi gọi API GitHub. Để điều này hoạt động bình thường trên Safari (Di động), tôi thực sự phải loại bỏ tất cả khoảng trắng khỏi nguồn base64 trước khi tôi thậm chí có thể giải mã nguồn. Liệu điều này có còn phù hợp vào năm 2021 hay không, tôi không biết:
330 hữu ích 5 bình luận chia sẻ |