示例

public static void main(String[] args) {
String str1 = "\uD801\uDC00"; //U+10400;DESERET CAPITAL LETTER LONG //$NON-NLS-1$
// //$NON-NLS-1$
String str2 = str1.toLowerCase();
for (int i = 0, n = str2.length(); i < n; i++) {
System.out.println(Integer.toHexString(str2.charAt(i)));
}
}
解决方案
使用 J2SE 1.5.0

public static void main(String[] args) {
String str1 = "\uD801\uDC00"; //$NON-NLS-1$
String str2 = str1.toLowerCase();

for (int i = 0, n = str2.length(); i < n; i++) {
System.out.println(Integer.toHexString(str2.charAt(i)));
}
}
解决方案
使用 ICU 2.6.1
  • com.ibm.icu.lang.UCharacter.toLowerCase (java.lang.String)
  • com.ibm.icu.lang.UCharacter.toLowerCase (java.util.Locale, java.lang.String)

public static void solutionExampleICU() {
String str1 = "\uD801\uDC00"; //U+10400;DESERET CAPITAL LETTER LONG
String str2 = com.ibm.icu.lang.UCharacter.toLowerCase(str1);
// str2 should be \uD801\uDC28 //U+10428;DESERET SMALL LETTER LONG
// dump str2 hex value
for (int i = 0; i < str2.length(); i++) {
System.out.println(Integer.toHexString(com.ibm.icu.text.UTF16.charAt(str2, i)));
}
}