Seb*_*olm 148

使用该getBytes方法,给它适当的Charset(或Charset名称).

例:

String s = "Hello, there.";
byte[] b = s.getBytes(StandardCharsets.US_ASCII);
Run Code Online (Sandbox Code Playgroud)

(Java 7的前:byte[] b = s.getBytes("US-ASCII");)

  • 对于使用Java 7或更高版本的用户,请使用类[StandardCharsets](http://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html),其中包含标准字符集的一些常量.`byte [] b = s.getBytes(StandardCharsets.US_ASCII);` (11认同)
  • 我觉得这很容易让我感到尴尬. (9认同)
  • 这会将'\ u00e0'(à)等不可映射的字符转换为'?'.有一个将其转换为'a'的方法会更好. (4认同)

Tom*_*icz 23

如果您是用户,则有一个方便的Charsets课程:

String s = "Hello, world!";
byte[] b = s.getBytes(Charsets.US_ASCII);
Run Code Online (Sandbox Code Playgroud)

除了在源代码中有一个更大的优势不是硬编码字符集的任意名称:Charsets.US_ASCII是的Charset类型(没有String),所以你避免检查UnsupportedEncodingException只能从抛出String.getBytes(String),而不是从String.getBytes(Charset).

在Java 7中有等价的StandardCharsets类.


Jör*_*ann 5

您尝试的代码中只有一个字符错误:

Charset characterSet = Charset.forName("US-ASCII");
String string = "Wazzup";
byte[] bytes = String.getBytes(characterSet);
               ^
Run Code Online (Sandbox Code Playgroud)

注意大写"String".这会尝试在字符串类上调用静态方法,该方法不存在.相反,您需要在字符串实例上调用该方法:

byte[] bytes = string.getBytes(characterSet);
Run Code Online (Sandbox Code Playgroud)


Arn*_*len 5

其他提出的解决方案的问题是它们会丢弃无法直接映射到ASCII的字符,或者用标记字符替换它们?.

您可能希望将重音字符转换为没有重音的相同字符.有一些技巧可以做到这一点(包括自己构建静态映射表或利用为unicode定义的现有'规范化'),但这些方法还远未完成.

您最好的选择是使用junidecode库,该库也不能完整,但在以最合理的方式将Unicode转换为ASCII方面具有丰富的经验.