【问题标题】:Check whether bytes in a byte array are Unicode检查字节数组中的字节是否为 Unicode
【发布时间】:2012-12-17 16:49:54
【问题描述】:

如何检查字节数组中的字节是否为 Unicode 字符?

主要问题:

android 4.2 new String(bytes) remove unicode chars from my String: [\uFFFD]

我需要一个解决方法。

【问题讨论】:

  • 你知道一个unicode字符可以编码成几个字节,对吧?
  • 我们谈论的是 UTF-8、UTF-16 还是 UTF-32?
  • \uFFFD 不是真正的 unicode 字符。它是 unicode 中无法表示的字符的占位符。

标签: java android unicode byte


【解决方案1】:
return Charset.forName("UTF-8").newEncoder().canEncode(string);

更新:您没有将Charset 传递给new String(bytes),因此它只是假设您使用的是默认字符集。相反,例如new String(bytes, "UTF-8").

【讨论】:

  • 查看主要问题部分
  • new String(bytes, "UTF-8") 在 android 4.2 中给我相同的字符串,没有我的 unicode [\uFFFD],奇怪的是:如果我使用 new String(bytes, "UTF- 8") 在 4.2 下,这也不起作用,删除我的 unicode char,只有当我使用 new String(bytes)。
  • 那么,无论您从 获取字节,它可能不是 UTF-8 编码的;它正在使用其他编码。
【解决方案2】:

不,不是真的。例如,您可以通过观察字节数组中的字符不违反 UTF-8 规则来猜测。有关更多信息,请参阅http://blogs.msdn.com/b/oldnewthing/archive/2007/04/17/2158334.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-14
    • 2019-08-13
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 2014-07-12
    • 1970-01-01
    相关资源
    最近更新 更多