【发布时间】:2021-03-30 15:32:51
【问题描述】:
我正在编写一个程序来根据字母(即“abc”= a+b+c = 1+2+3 = 6)获取单词的“总和”。我正在使用total += (int) char - 'a' + 1(在Java中)的方法。该程序不区分大小写('A' = 'a'),所以首先我想在必要时将 char 转换为小写。我写了
if (char < 'a') {char += 32;}
在 UTF-16 和 ASCII 中是正确的,但不是 UTF-8。
我的问题是,如果我要发布这段代码,编码在编译后是如何工作的?如果用户使用的是UTF-8,程序会失败(所以最好使用Character.toLowerCase()),或者由于程序是Java,程序中的任何字符都将是程序的编码,因此可以工作?
如果不清楚,我不知道我在说什么,所以一些关于编码如何工作的一般信息也会很棒。
【问题讨论】:
-
Java 默认使用 UTF-16,但您可以在构造函数中设置字符串的字符集。您可以使用 String.toLowerCase 使其不区分大小写。以下是标准 ASCII 字符值表:asciitable.com 这基本上就是您想要使用的。
-
不能设置字符串的字符集,它是UTF-16。您可以声明用于初始化字符串的字节数组的字符集;这告诉运行时如何转换为 UTF-16。
-
为什么不使用现有的hash function 而不是自己发明呢?
String::hashCode返回一个int。 -
@BasilBorque - 这不是他想要做的。他似乎想用特定的值替换特定的字母。
标签: java unicode character-encoding ascii