在Java中,字符的int值应该称为其ASCII值还是Unicode值

在Java中,字符的int值应该称为其ASCII值还是Unicode值,java,unicode,ascii,Java,Unicode,Ascii,我正在用Java编写一个只处理大写字母的程序。在某些处理过程中,我使用这些大写字母的字符的int值。我知道在Unicode和ASCII中,大写字母的值是相同的,但是当提到这些int值时,我应该说它们是Unicode值还是ASCII值?我只是想确保我在语言方面使用了正确的术语。它应该被称为Unicode代码单元。Javachar是一个16位的Unicode代码单元,与32位的Unicode代码点相反(最初认为Unicode是16位的)。不管值是什么,它总是需要16位。ASCII是7位(如果您考虑0

我正在用Java编写一个只处理大写字母的程序。在某些处理过程中,我使用这些大写字母的字符的
int
值。我知道在Unicode和ASCII中,大写字母的值是相同的,但是当提到这些
int
值时,我应该说它们是Unicode值还是ASCII值?我只是想确保我在语言方面使用了正确的术语。

它应该被称为Unicode代码单元。Java
char
是一个16位的Unicode代码单元,与32位的Unicode代码点相反(最初认为Unicode是16位的)。不管值是什么,它总是需要16位。ASCII是7位(如果您考虑0填充/错误检查位)8。因此,即使实际值相同,该术语也不完全适用。

如果字符将仅为ASCII,则可以将其称为ASCII。否则,您应该使用术语Unicode,正如您所说的,它是ASCII的正确超集。请记住,即使您将它们称为ASCII,如果您要将它们发送到期望使用实数(基于八位字节)ASCII的对象,则可能需要更改编码

如果您的软件只处理ASCII范围内的代码点(见下文,这通常不是一个好主意),那么(对用户或文档中)说“ASCII值”要比说“ASCII范围内的Unicode值”容易得多:-)

如果只处理ASCII范围内的大写字母,那么在处理大写字母时,将值称为Unicode代码点实际上是误导性的

现在的任何新软件都应该使用Unicode编写,这包括大写字母不限于ASCII范围这一事实


例如,在ASCII范围之外有一大块希腊字符,它们具有大写和小写属性。该文件显示了这些属性,并且在主题上还有一个标记。

数字代码的正确术语是其代码点。例如:

  • 数字一的代码点为3116(4910),通常写为U+0031
  • 磅符号
    的代码点为U+00A3
  • 带分音符的
    拉丁文小写字母I的代码点为U+00EF
  • 希腊文小写字母MU
    的代码点为U+03BC
  • 上面带点的拉丁文小写字母F的代码点为U+1E1F
  • 替换字符的代码点为U+FFFD
  • 音乐符号双平面的编码点为U+1D12B
  • 数学斜体大写字母R
    的代码点为U+1D445
  • 外星人的代码点为U+1F47D
    
  • U+100002是
    辅助\U专用\U使用\U区域\U B
    块中指定的代码点
  • 代码点U+0041的指定名称为
    拉丁文大写字母A
  • 代码点U+1F47E的指定名称为
    外星人怪物
  • 代码点U+0FFE未分配,因此没有名称

等等。

超集。此外,我认为这是误导,因为即使在ASCII范围内,也需要16位。@Matthew,是的,对不起,搞错了。但我仍然倾向于区分字符的编码和它们的“代码点”或含义,与“Unicode”和“UTF8/UCS2/UTF-32/etc”之间的区别没有区别。说它是误导性的,因为它是16位宽与8位宽没有什么不同:没有人抱怨7位ASCII值存储在一个字节中:-)如果值仅为0到127,无论宽度如何,您都可以将其称为ASCII—在与非Unicode环境通信时,您只需将其缩小到相应的大小即可。您的计算机不使用ASCII。如果是linux或unix,它可能使用iso-8859-1,如果是windows,它可能使用cp1251。是的,如果我只使用这些代码页的下半部分,我将其称为ASCII:-)