【问题标题】:How can I convert these UTF-8 literals into character strings?如何将这些 UTF-8 文字转换为字符串?
【发布时间】:2011-11-04 13:41:52
【问题描述】:

我有这样的 UTF-8 文字:

String literal = "\x6c\x69b/\x62\x2f\x6d\x69nd/m\x61x\x2e\x70h\x70";

我需要阅读它们并将它们转换为纯文本。

java中是否有可以解释这些的导入?

谢谢。

【问题讨论】:

  • 这个常数是不可能的——没有像“\x”这样的转义字符。 Unicode 字符串看起来像“\\u0444\\u044B\\u0432”。
  • 您的文字中编码了哪些真实文本?
  • utf8-chartable.de/… 看看它们确实存在的文字
  • 我的意思是——试着编译你的代码。
  • @Kyle - 最好的办法(IMO)是将其作为一个新问题提出。并花时间确保您使用正确的 Java 术语清楚地提出问题。 (您不是在询问 Java 文字,也不是在询问 Java 导入......所以不要使用这些术语。)

标签: java


【解决方案1】:

Java 本身不支持 UTF-8 文字。 Java 对 Unicode 的语言支持仅限于基于 UTF-16 的 Unicode 转义。

您可以使用 Unicode 转义符在字符串文字中表达您的 UTF-8 字符,如下所示:

String literal = 
    "\u006c\u0069b/\u0062\u002f\u006d\u0069nd/m\u0061x\u002e\u0070h\u0070";

(假设没有打字错误...)

或者您可以(在这种情况下)将转义符替换为普通的 ASCII 字符。

请注意,从 UTF-8 到 UTF16 的转换通常不是那么简单。 (在这种情况下很简单,因为 \xnn 字符都小于 0x80,因此每个字符都代表一个 Unicode 代码点/单元。)


另一种方法是将 UTF-8 表示为字节数组,并将其转换为字符串;例如

byte[] bytes = new byte[]{
    0x6c, 0x69, 'b', '/', 0x62, 0x2f, 0x6d, 0x69, 'n', 'd', 
    '/', 'm', 0x61, 'x', 0x2e, 0x70, 'h', 0x70};
String str = new String(bytes, "UTF-8");

(再次假设没有打字错误。)

【讨论】:

  • 我的目标出错了。我的应用程序中不存在字符串文字。我有一个文本文件目录,其中包含 unicode 文本。我想将它们解码为可读格式,或者只是字母。我打算创建一个解密函数来读取和保存转换后的文本,但是我不知道如何开始。
  • @Kyle 看到我对这个问题的评论,
  • 我如何以编程方式将 \xnn 字符转换为它们在 Java 中的字符串表示形式?
  • 通过编写一些 Java 代码循环输入字符串中的字符以查找转义序列......并将它们转换为输出字符串的字符。这只是编程。
【解决方案2】:

如果您要读取文件中的字符,则可以使用InputStreamReader 将字符串所在的任何字符集转换为char 的序列:

InputStream is = ...; // get the input stream however you want
InputStreamReader isr = new InputStreamReader(is, "charset-name");

【讨论】:

    猜你喜欢
    • 2010-11-03
    • 2012-10-28
    • 2013-03-02
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多