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");
)
Tom*_*icz 23
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
类.
您尝试的代码中只有一个字符错误:
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)
其他提出的解决方案的问题是它们会丢弃无法直接映射到ASCII的字符,或者用标记字符替换它们?
.
您可能希望将重音字符转换为没有重音的相同字符.有一些技巧可以做到这一点(包括自己构建静态映射表或利用为unicode定义的现有'规范化'),但这些方法还远未完成.
您最好的选择是使用junidecode库,该库也不能完整,但在以最合理的方式将Unicode转换为ASCII方面具有丰富的经验.