将Base64解码为UTF-8而不是单字节编码文本

4

以下是我尝试过的事情:

向缓冲区添加注释:#-*- coding: utf-8; -*-

M-x M-m c,从列表中选择utf-8,然后 M-xbase64-decode-region

这是缓冲区显示的内容:\327\252\327\234 \327\220\327\221\327\231\327\221。它应该显示为תל אביב。源字符串看起来像这样:16rXnCDXkNeR15nXkQ==


你是指 C-x RET c 吗?你尝试过反过来吗?先解码,然后切换到 UTF-8。 - Olaf Dietsche
我假设你已经安装了适当的字体? - Olaf Dietsche
1个回答

5
缓冲区的编码系统指定了从文件读取内容和将内容写入文件时使用的编码系统。也就是说,你的“coding: utf-8”只表示如何解码ASCII源字符串(因为它是ASCII,所以不需要任何特殊解码,但base64字符串可能被非ASCII文本包围)。
你需要在调用base64-decode-region之后调用decode-coding-region
以下是相应的函数定义:
(defun base64-decode-utf8-region (start end)
  (interactive "r")
  (save-restriction
    (narrow-to-region start end)
    (base64-decode-region (point-min) (point-max))
    (decode-coding-region (point-min) (point-max) 'utf-8)))

(defun base64-encode-utf8-region (start end)
  (interactive "r")
  (save-restriction
    (narrow-to-region start end)
    (encode-coding-region (point-min) (point-max) 'utf-8)
    (base64-encode-region (point-min) (point-max))))

ASCII 只包含小于 128 的字符,因此不涉及任何代码页。 - Stefan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接