【问题标题】:how to define encoding of a Base64 encoded string in java如何在java中定义Base64编码字符串的编码
【发布时间】:2013-11-08 17:31:59
【问题描述】:

我收到了一个 XML 文件,其中包含一个 PDF 附件,编码为 Base64 字符串。我正在尝试从中生成一个PDF 文件。以下代码运行良好:

String base64encodedPdf =" ....   ";
byte[] imgBytes = javax.xml.bind.DatatypeConverter.parseBase64Binary(base64encodedPdf);
IOUtils.write(imgBytes, new FileOutputStream("C:\\\\test.pdf"));

当附件数据太大而无法直接复制到编辑器时会出现问题,我想我可以将其复制到文本文件并读取文件并转换为String。我就是这样做的:

org.apache.commons.io.FileUtils.readFileToString(file, encoding)

我很好奇我应该指定什么编码...UTF-8UTF-16为什么?

编辑:

这是我可以使用的元信息

<AttachmentType tc="1">Document</AttachmentType>
<MimeType>application/pdf</MimeType>
<TransferEncodingTypeString>Base64</TransferEncodingTypeString>
<TransferEncodingTypeTC tc="4">Base64</TransferEncodingTypeTC>

【问题讨论】:

  • 那么文本存储在什么编码中?我们不可能知道 - 希望你知道......
  • 这是一个好问题....我补充说我有哪些元信息可用
  • Base64 用于编码“二进制”数据。因此,当您对其进行解码并将文件写入磁盘时,您想要写入确切的二进制结果,而不是某些字符编码。这不是字符数据。
  • @HotLicks 抱歉没有关注你。你建议什么改变
  • 请参阅this question,了解如何确定您的 XML 文档的编码方式。它很可能是 UTF-8,但也可能是其他的,具体取决于 BOM 和 XML 序言。跨度>

标签: java file-io apache-commons


【解决方案1】:

这取决于您在写入文本文件时使用的编码。 Java 文本相关的 IO 类如 PrintWriter 有一个构造函数,允许您显式定义编码,例如:

new PrintWriter("foo.txt", "UTF-8");

如果您不这样做,它将使用可能因平台/JVM 设置而异的默认编码。您使用

检查您的平台的默认编码
Charset.defaultCharset()

但最好在写入文件时始终明确指定您的预期编码

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 2011-10-31
    • 2021-10-27
    • 1970-01-01
    • 2023-04-04
    • 2021-09-22
    • 2018-01-27
    相关资源
    最近更新 更多