【问题标题】:UTF-8 encoding vs Base-64 EncodingUTF-8 编码与 Base-64 编码
【发布时间】:2011-10-11 03:27:03
【问题描述】:

我想对可能是图像或任何 pdf 的文件进行编码并将其发送到服务器。我必须遵循哪种类型的编码和解码。 (服务器和客户端都在我们公司。我们可以在这两个地方编写逻辑)。 UTF-8 编码 在 java 中默认支持。要使用 Base-64 编码,我必须导入外部 jar。对于简单的文本,两种方式都可以正常工作。我正在使用tcp socket编程。

使用 UTF-8 编码

String str = "This is my Sample application";
        String urlEncodedData = URLEncoder.encode(str, "UTF-8"); // Encoding with UTF-8
        System.out.println("..after URL Encodingencoding..."+urlEncodedData );
        String retrievedData = URLDecoder.decode(urlEncodedData , "UTF-8");// Decoding with UTF-8
        System.out.println("..after decoding..."+retrievedData ); 

使用 Base-64(使用 apache 的 commons.codec jar

byte[] b =Base64.encodeBase64(str.getBytes()); //Encoding  base 64
        Base64.decodeBase64(b); // Decoding with Base 64

【问题讨论】:

  • 你在比较苹果和梨。 Base64 只是用来表达数据的数字基数。 UTF-8 是一种编码方案,它在字节流中对数字(被认为是代码点)进行编码。
  • 查看问题here。它被标记为 C#,但编码信息的应用方式相同。
  • 为什么要/需要对二进制文件(PDF 和图像)进行编码?不能直接发到服务器吗?
  • 它不仅是一个 abot pdf,我也有图像文件。如果文件很大,我将按块发送文件

标签: java


【解决方案1】:

UTF-8 是一种 text 编码 - 一种将文本编码为二进制数据的方式。

Base64 在某些方面正好相反 - 它是将任意二进制数据编码为 ASCII 文本的一种方式。

如果您需要将任意二进制数据编码为文本,Base64 是可行的方法 - 您不得尝试将任意二进制数据视为 UTF- 8 个编码文本数据。

但是,您很可能首先将文件作为二进制数据传输到服务器 - 这取决于您使用的传输方式。

【讨论】:

  • 我正在使用tcp socket编程。
  • @Deepakkk:嗯,我确定你使用的some 协议比这略高...取决于应用程序协议是什么,你可能会或可能会不需要执行二进制到文本编码。
  • @JonSkeet 为什么我们不能尝试将任意二进制数据视为 UTF-8 而 Base64 假设字节以 ASCII 编码?
  • @sarahTheButterFly:并非每个字节序列都是有效的 UTF-8 编码文本。关于允许的内容有一些规则 - 查看 Wikiedia UTF-8 文章以了解详细信息。即使每个字节序列都是有效,你会发现很多产生的字符可能很难通过许多传输传输,而 Base64 只使用 ASCII 中的非控制字符,这通常很容易传输。
  • @CᴴᴀZ 你觉得有什么不同? String 是一种表示文本的类型。字节是二进制数据。 “字符串到字节”和“文本到二进制”是一回事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 2014-10-18
相关资源
最近更新 更多