澄清字符编码的工作原理

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');

原因:

  1. 检查预期范围更谨慎

  2. 你不需要'know'小写字母和大写字母之间的距离是32。

此外,'char' 是 Java 中的关键字。

这当然只适用于无重音 USA/UK 字母表中的字母。

但是,我建议您使用(正如您自己所说的)'toLowerCase()',因为这就是它的用途 - 以减轻您的细节负担。