英文:
Base64 encoding string in Java doubles its length
问题
问题
我正尝试在Java中将doc/pdf文件的内容编码为Base64字符串。
编码后的字符串长度几乎增加了一倍(115k -> 230k)。
然而,使用Python/PHP或任何在线工具对相同文件内容进行编码只会增加三分之一的大小(115k -> 154k)。
是什么原因导致Java中大小增加,是否有任何方法可以获得与其他源相同的结果?
代码
import java.util.Base64;
...
//String content;
System.out.println(content.length());
String encodedStr = new String(Base64.getEncoder().encode(content.getBytes()));
System.out.println(encodedStr.length());
String urlEncodedStr = new String(Base64.getUrlEncoder().encode(content.getBytes()));
System.out.println(urlEncodedStr.length());
String mimeEncodedStr = new String(Base64.getMimeEncoder().encode(content.getBytes()));
System.out.println(mimeEncodedStr.length());
输出
对于pdf文件:
115747
230816
230816
236890
对于doc文件:
13685
26392
26392
27086
英文:
Problem
I am trying to encode file contents of doc/pdf extensions to Base64 string in Java.
The encoded string length almost doubles from the original(115k -> 230k).
Whereas encoding the same file contents in Python/PHP or any online tool only gives a third increase(115k -> 154k).
What causes this increase in size for Java and is there any way to get equivalent result as the other sources?
Code
import java.util.Base64;
...
//String content;
System.out.println(content.length());
String encodedStr = new String(Base64.getEncoder().encode(content.getBytes()));
System.out.println(encodedStr.length());
String urlEncodedStr = new String(Base64.getUrlEncoder().encode(content.getBytes()));
System.out.println(urlEncodedStr.length());
String mimieEncodedStr = new String(Base64.getMimeEncoder().encode(content.getBytes()));
System.out.println(mimieEncodedStr.length());
Output
For pdf file
115747
230816
230816
236890
For doc file
13685
26392
26392
27086
答案1
得分: 1
首先,永远不要使用 new String
。其次,将一个编码传递给 String.getBytes(String)
方法(例如 content.getBytes(encoding)
)。例如,
String encodedStr = Base64.getEncoder()
.encodeToString(content.getBytes("UTF-8"));
或者
String encodedStr = Base64.getEncoder()
.encodeToString(content.getBytes("US-ASCII"));
英文:
First, never use new String
. Second, pass an encoding to String.getBytes(String)
(e.g. content.getBytes(encoding)
). For example,
String encodedStr = Base64.getEncoder()
.encodeToString(content.getBytes("UTF-8"));
or
String encodedStr = Base64.getEncoder()
.encodeToString(content.getBytes("US-ASCII"));
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论