Tag: unicode

Java如何在其16位字符类型中存储UTF-16字符?

根据Java SE 7规范 ,Java使用Unicode UTF-16标准来表示字符。 将String想象成一个包含一个字符的16位变量的简单数组时,生活很简单。 不幸的是,有16位的代码点是不够的(我相信它是所有Unicode字符的16/17)。 所以在String ,这没有直接问题,因为当想要使用额外的两个字节存储这些~1.048.576字符中的一个时,只需使用该String两个数组位置。 这没有任何直接问题,适用于String ,因为总有两个字节。 虽然单变量与UTF-16编码相比,具有16位的固定长度 ,但如何存储这些字符,特别是Java如何使用2字节“char”来完成类型 ?

Java Unicode变量名称

我在一个讨论变量命名的论坛中进行了有趣的讨论。 除了惯例之外,我注意到变量具有Unicode字符的名称是合法的,例如以下是合法的: int \u1234; 但是,如果我给它命名为#,则会产生错误。 根据Sun的教程 ,如果“以字母开头,美元符号为”$“或下划线字符”_“,则有效。” 但是unicode 1234是一些Ethiopic角色。 那真正被定义为“字母”的是什么?

如何在java中使用中文和日文字符作为字符串?

你好 我使用的是java语言。 在这里我必须使用一些中文,日文字符作为字符串并使用System.out.println()进行打印。 我怎样才能做到这一点? 谢谢

有效的Unicode字符串可以包含FFFF吗? Java / CharacterIterator坏了吗?

以下是java.text.CharacterIterator文档的摘录: 该interface定义了用于文本双向迭代的协议。 迭代器迭代有界字符序列。 […]方法previous()和next()用于迭代。 如果[…]它们返回DONE ,表示迭代器已到达序列的末尾。 static final char DONE :迭代器到达文本的结尾或开头时返回的常量。 值为\uFFFF ,“非字符”值不应出现在任何有效的Unicode字符串中 。 斜体部分是我无法理解的部分,因为从我的测试来看,它看起来像Java String肯定包含\uFFFF ,并且它似乎没有任何问题,除了显然使用规定的CharacterIterator遍历由于误报而中断的成语(例如, next()返回’\uFFFF’ == DONE当它没有真正“完成”时)。 这里有一个片段来说明“问题”( 另见ideone.com ): import java.text.*; public class CharacterIteratorTest { // this is the prescribed traversal idiom from the documentation public static void traverseForward(CharacterIterator iter) { for(char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) […]

Java中的字节和字符转换

如果我将一个字符转换为byte然后再转换为字符,则该字符会神秘地消失并成为其他内容。 这怎么可能? 这是代码: char a = ‘È’; // line 1 byte b = (byte)a; // line 2 char c = (char)b; // line 3 System.out.println((char)c + ” ” + (int)c); 直到第2行一切都很好: 在第1行,我可以在控制台中打印“a”,它会显示“È”。 在第2行,我可以在控制台中打印“b”,它会显示-56,即200,因为字节已签名。 200是“È”。 所以它仍然很好。 但第3行有什么不对? “c”成为别的东西,程序打印? 65480 ? 65480 这是完全不同的东西。 我应该在第3行写什么才能得到正确的结果?