当前位置: 首页 > 知识库问答 >
问题:

从字符串到字节[]转换为字符串

裴令秋
2023-03-14

我遇到了这样一个java字符串,其中以下内容是错误的:

body.equals(new String(body.getBytes()));

我想这是因为字符串构造函数默认将主体字节[]的编码视为UTF-8,我不是100%确定。我如何能够将此字符串存储在字节[]中,并能够稍后将其转换回来?我想我需要能够确定字节[]的编码方式。我该怎么做呢?

一些上下文:我需要字节[],以便压缩数据,将其存储在数据库中,然后解压缩并将未压缩的字节[]转换回原始字符串。这个字符串最初来自某个下载了网页的库,我不确定他们在把它交给我之前对字符串做了什么处理。

共有3个答案

章侯林
2023-03-14

在字节和字符之间转换而不指定编码时,行为取决于平台。使用的默认编码是JVM范围内的,具体取决于您的系统。我不知道如果编码是ASCII,并且你有一些非ASCII字符,会发生什么,但我知道你会得到一个不同的字符串。您需要在每次协调时指定编码以避免这种情况。

燕志学
2023-03-14

只要确保在两种情况下使用相同的字符集——从字符串创建字节数组时和从字节数组创建字符串时。

因此,您的示例最好是:

body.equals(new String(body.getBytes("utf-8"), "utf-8"));

这将保证,无论环境如何,字节都将被理解。

毫无疑问,您还应该使用unicode。如果您选择单字节编码(例如ISO代码页),您将来可能会后悔,即使现在有满足您需求的单字节编码。

施英哲
2023-03-14

平台默认字符集用于编码和解码。

问题是,字符集可能是有限的,例如US-ASCII。如果字符串中的某个字符在该字符集之外,我们将丢失它。

使用覆盖所有unicode字符的字符集,例如UTF-8、UTF-16。

 类似资料:
  • 如何将字符串(字节字符串)转换为字节(字节字符串),而不必手动复制和粘贴字符串并在其前面放置b?

  • 问题内容: 我想在GO中将字符串数组转换为字节数组,以便可以将其写到磁盘上。将字符串数组()解码为字节数组()的最佳解决方案是什么? 我正在考虑对字符串数组进行两次迭代,第一个迭代以获得字节数组所需的实际大小,然后第二个迭代写入每个元素的长度和实际字符串()。 解决方案必须能够以其他方式进行转换;从一个到一个。 问题答案: 让我们忽略一个事实,那就是走一秒钟。您需要做的第一件事是将序列化格式编组为

  • 问题内容: 我有以下代码,我试图通过测试,但似乎无法理解Java世界中各种编码形式。 我想我的问题是:将任意字节的字节数组转换为Java字符串,然后将同一Java String转换为另一个字节数组的正确方法是什么,该字节数组将具有与原始字节相同的长度和相同的内容数组? 问题答案: 尝试特定的编码: ideone链接

  • 问题内容: 我正在使用以下代码从外部程序获取标准输出: 方法返回一个字节数组: 但是,我想将输出作为普通的字符串使用。这样我就可以像这样打印它: 我认为这就是方法的用途,但是当我尝试使用它时,我又得到了相同的字节数组: 如何将字节值转换回字符串?我的意思是,使用”batteries”而不是手动进行操作。我希望它与Python 3兼容。 问题答案: 你需要解码bytes对象以产生一个字符串:

  • 我目前正在尝试创建一个聊天服务器作为一个分配,并希望每个消息包含一个头。它将包含ipv4地址,后跟一个字母,然后是用户名 我可以很容易地从字节中解码字符串字母,但现在我很难从字节中解码ipv4地址 我只需要一种方法来尝试和解码四个字节的整数到一个字符串或一些沿这些线的东西 谢谢:D

  • 我正在制作一个Android应用程序,它可以与蓝牙设备进行通信。我正在为选定的特征写一条特定的信息,如下所示: 我的转换函数如下所示: 我试图弄清楚为什么在这种情况下,我的转换输出是这样的: D/上传数据集:消息:�������������������� 这很奇怪,因为当我使用相同的转换函数来转换作为蓝牙通知接收到的值时,它工作得非常好。欢迎提出问题所在的任何建议