Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8248655

Support supplementary characters in String case insensitive operations

    XMLWordPrintable

    Details

    • Type: Enhancement
    • Status: Resolved
    • Priority: P4
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 16
    • Component/s: core-libs
    • Subcomponent:
    • Resolved In Build:
      b08
    • CPU:
      generic
    • OS:
      generic

      Description

      The issue JDK-8248434 revealed that the case-insensitive comparisons for supplementary characters in the following methods have problems:

      java.lang.String.regionMatches(ignoreCase == true, ...)
      java.lang.String.equalsIgnoreCase()
      java.lang.String.compareToIgnoreCase()

      These methods are supposed to match/compare strings in a case-insensitive manner. However, their specs and implementations are char based, which cannot handle supplementary characters correctly. For example,

      "\ud83a\udd2e".regionMatches(true, 0, "\ud83a\udd0c", 0, 2)
      Returns false (conforming to the existing spec), although "\ud83a\udd2e" is the 'ADLAM SMALL LETTER O' character which has the code point U+1E92E, and "\ud83a\udd0c" is the 'ADLAM CAPITAL LETTER O' character which has the code point U+1E90C. Thus it should return true if it is true to the meaning of "ignore case." This behavior contradicts to the fact that:

      "\ud83a\udd2e".toUpperCase(Locale.ROOT).equals("\ud83a\udd0c")
      Character.toUpperCase(0x1e92e) == 0x1e90c
      each statement returns true.

      Both the spec and its implementation need to be modified.

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              naoto Naoto Sato
              Reporter:
              naoto Naoto Sato
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: