澄清字符编码的工作原理
Clarification on how character encodings work
我正在编写一个程序来根据字母(即“abc”= a+b+c = 1+2+3 = 6)获取单词的“总和”。我正在使用 total += (int) char - 'a' + 1
的方法(在 Java 中)。该程序不区分大小写 ('A' = 'a'),因此如果需要,我首先想将字符转换为小写。我写了
if (char < 'a') {char += 32;}
在 UTF-16 和 ASCII 中正确,但在 UTF-8 中不正确。
我的问题是,如果我要发送此代码,编码如何通过编译工作?如果用户使用的是 UTF-8,程序会不会失败(所以最好使用 Character.toLowerCase()
),或者因为程序在 Java 中,程序中的任何字符都将是程序的编码,因此有用吗?
如果不清楚,我不知道我在说什么,所以一些关于编码如何工作的一般信息也很好。
A Java 字符串始终以 UTF-16 编码;输入和输出根据需要进行转换。
然而,这可以写得更好:
if (char < 'a') {char += 32;}
作为
if (ch >= 'A' && ch <= 'Z')
ch += ('a' - 'A');
原因:
检查预期范围更谨慎
你不需要'know'小写字母和大写字母之间的距离是32。
此外,'char' 是 Java 中的关键字。
这当然只适用于无重音 USA/UK 字母表中的字母。
但是,我建议您使用(正如您自己所说的)'toLowerCase()',因为这就是它的用途 - 以减轻您的细节负担。
我正在编写一个程序来根据字母(即“abc”= a+b+c = 1+2+3 = 6)获取单词的“总和”。我正在使用 total += (int) char - 'a' + 1
的方法(在 Java 中)。该程序不区分大小写 ('A' = 'a'),因此如果需要,我首先想将字符转换为小写。我写了
if (char < 'a') {char += 32;}
在 UTF-16 和 ASCII 中正确,但在 UTF-8 中不正确。
我的问题是,如果我要发送此代码,编码如何通过编译工作?如果用户使用的是 UTF-8,程序会不会失败(所以最好使用 Character.toLowerCase()
),或者因为程序在 Java 中,程序中的任何字符都将是程序的编码,因此有用吗?
如果不清楚,我不知道我在说什么,所以一些关于编码如何工作的一般信息也很好。
A Java 字符串始终以 UTF-16 编码;输入和输出根据需要进行转换。
然而,这可以写得更好:
if (char < 'a') {char += 32;}
作为
if (ch >= 'A' && ch <= 'Z')
ch += ('a' - 'A');
原因:
检查预期范围更谨慎
你不需要'know'小写字母和大写字母之间的距离是32。
此外,'char' 是 Java 中的关键字。
这当然只适用于无重音 USA/UK 字母表中的字母。
但是,我建议您使用(正如您自己所说的)'toLowerCase()',因为这就是它的用途 - 以减轻您的细节负担。