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

时间:2013-03-14 11:27:34

标签: emacs base64

以下是我尝试过的事情:

在缓冲区中添加了注释:#-*- coding: utf-8; -*-

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

以下是缓冲区显示的内容:\327\252\327\234 \327\220\327\221\327\231\327\221。 “应该”展示的是תל אביב。源字符串如下所示:16rXnCDXkNeR15nXkQ==

1 个答案:

答案 0 :(得分:4)

缓冲区的编码系统指定从文件读取内容时以及将内容写入文件时使用的编码系统。 IOW,你的“编码:utf-8”东西只表示如何解码ASCII源字符串(不需要任何特殊的解码,因为它是ASCII,但是base64字符串可能被非ASCII文本包围)。

您需要在致电decode-coding-region后致电base64-decode-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))))