繁体   English   中英

澄清字符编码的工作原理

[英]Clarification on how character encodings work

我正在编写一个程序来获得一个单词的“总和”,基于字母(即“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 编码; 输入和 output 根据需要进行转换。

然而,这可以写得更好:

 if (char < 'a') {char += 32;}

作为

 if (ch >= 'A' && ch <= 'Z')
    ch += ('a' - 'A');

原因:

  1. 检查预期范围只是更加谨慎

  2. 您不需要“知道”小写字母和大写字母之间的距离是 32。

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

这当然只适用于非重音美国/英国字母表中的字母。

但是,我建议您使用(如您自己所说)'toLowerCase()',因为这就是它的用途 - 让您摆脱细节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM