Downloading ICU‎ > ‎

ICU 65 Release Candidate

This is a release candidate for ICU 65. The release is planned for early October 2019.

Please do test this release candidate on your platforms and report bugs and regressions by Tuesday, 2019-sep-24.

Please do not use this release candidate in production.

ICU is the premier library for software internationalization, used by a wide array of companies and organizations.

Release Overview

ICU 65 updates to CLDR 36 locale data with many additions and corrections, and some new measurement units. The Java LocaleMatcher API is improved, and ported to C++. For building ICU data, there are new filtering options, and new tracing support for data loading in ICU4C.

For more details, including migration issues, see below.

Please use the icu-support mailing list and/or find/submit error reports.

List of tickets fixed in ICU 65 (=65.1)

Version Number

The initial release has library version number 65.1.

If there are maintenance releases, they will be 65.2, 65.3, etc. (During ICU 65 development, the library version number was 65.0.x.)

Note: There may be additional commits on the maint-65 branch that are not included in the prepackaged download files.

Common Changes

  • CLDR 36 [TBD: link to blog post after final release]
    • Measurement units: Support for more units, with translations; new pattern for compound units.
    • Data for LocaleMatcher now includes fallbacks for related (“encompassed”) languages. (e.g., Cantonese→Chinese [Mandarin])
  • LocaleMatcher
    • Improved Java API: Builder class with additional options, Result class with additional data about a match, supports Java Locale directly. (ICU-20467)
    • Ported to C++. (ICU-9695)
  • Data filtering (User Guide)
    • New options in filters.json: additive strategy, disable pool bundles
    • Data tracing: ICU4C code instrumented to record what data it is using
  • Available Locales: added new API to include legacy and alias locales (ICU-20627)

ICU4C Specific Changes

    • C++ functions like clone() and freeze() now return covariant pointer types. For example, UnicodeSet::freeze() returns a pointer to UnicodeSet instead of to the base class UnicodeFunctor. (ICU-20783)
      • In rare cases, this may break subclasses. See the Migration Issues.
    • All of the public C++ headers now assume a default context of extern "C++"(ICU-20530)
    • All of the public C++ headers are guarded with the macro "U_SHOW_CPLUSPLUS_API". (ICU-20578)
    • Windows: The ICU4C UWP projects support building a data DLL. (Previously they only supported using a data .dat file.) (ICU-20712)
    • Windows: The ICU4C UWP projects have experimental support building for ARM64. (ICU-20712)
    • Windows: ICU4C has experimental build support for Desktop ARM and Desktop ARM64 (non-UWP). (ICU-20782)
      • Please note that there will likely be some issues/bugs/etc. since support is still very new for these platforms.
    • Various Out-Of-Memory (OOM) handling issues have been fixed. (ticket query)

    ICU4J Specific Changes

    • None 

    Known Issues

    Common Issues

    • None yet.

    ICU4C

    • ICU4C requires C++11 support. Some platforms (such as IBM AIX, IBM z and Solaris) may no longer be able to build ICU until an improved compiler is available. See the "ICU4C Platform Support" section below.
    • ICU4C has build errors on Cygwin 3.0.0, please use the previous version of Cygwin 2.11.2 as a work-around (ICU-20435).
    • ICU4C has known issues compiling with GCC on AIX. These are still being investigated (ICU-3752)
    • ICU4C regression introduced in ICU 63: Creating a DateTimePatternGenerator for an invalid or missing locale will return "U_MISSING_RESOURCE_ERROR" instead of falling back to root with a warning. (ICU-20558).

    ICU4J

    • ICU4J 63 upgraded to Java 7 and was intended to also support Android API level 21, but some code required API level 24. See #20255 for details & fix. The fix is included in ICU 64+ and on the maint/maint-63 branch.
    • ICU4J 65rc build target releaseVer fails with JUnit test failure for LocaleDistanceTest and LocaleMatcherTest caused by insufficient classpath configuration (ICU-20815). This problem will be fixed after 65rc.

    Migration Issues

    1. Function-like ICU4C API macros (e.g., U16_NEXT_OR_FFFD()) were always intended to be used with a trailing semicolon, but some macros were usable without semicolon, and when used with one caused -Wextra-semi-stmt warnings. This has been fixed. Please adjust call sites, adding missing semicolons. If you have a lot of such call sites, then you can temporarily change the definition of UPRV_BLOCK_MACRO_BEGIN and UPRV_BLOCK_MACRO_END in unicode/umachine.h. (ICU-20601icu/pull/759)
    2. Some C++ functions now return covariant (same-as-this) pointer types. (ICU-20783)
      1. Under the following conditions, this may break the definition of custom subclasses:
        1. You have a subclass of an ICU class that itself is a subclass of a class that defines virtual clone().
        2. For example: MyBreakIterator → RuleBasedBreakIterator → BreakIterator
        3. Note that RuleBasedBreakIterator::clone() now returns a pointer to RuleBasedBreakIterator not to BreakIterator.
        4. Your subclass (MyBreakIterator) defines clone() as returning a pointer to the base class (BreakIterator).
        5. This will no longer compile because the subclass clone returns a type that is not covariant (i.e., a type that is wider) than the type returned by clone in the immediate parent class (RuleBasedBreakIterator).
      2. To fix this, please change your subclass to return a pointer to the immediate parent (RuleBasedBreakIterator) or to itself (MyBreakIterator).
    3. All of the public C++ headers now assume a default context of extern "C++". (ICU-20530)
      1. ICU4C has both C and C++ headers, for callers using either a C or C++ compiler, or for callers using a C++ compiler who wish to have binary compatibility. The C++ headers were previously inconsistent in terms of the linkage context they assumed the caller to be using them with. In some cases the C++ headers would work in an extern "C" context and in other cases they would not. As of ICU 65, all of the public C++ headers now assume a default context of extern "C++".
      2. This means that callers including C++ headers inside an extern "C" block will need to modify their code to move the included header outside of the extern "C" block.
    4. All of the public C++ headers are guarded with the macro "U_SHOW_CPLUSPLUS_API". (ICU-20578)
      This macro is set to 1 by default if "__cplusplus" is defined, but it can be defined by users of ICU to be 0 before including any headers if they wish to only use the C APIs (with a C++ compiler).
    5. ICU4C on Windows no longer uses a fixed base address for the library DLLs. (ICU-20768)

    ICU4C Platform Support

    • All: Compiler support for C++11 is required for building the ICU libraries.
      • GCC: version 4.8 and later has been tested.
    • IBM AIX:
      • xlC C/C++ does not currently support a sufficient subset of C++11 (#13393)
      • gcc might work
    • macOS: XCode 8.3 (LLVM clang 8.1.0) has been tested.
    • Solaris
    • Windows:
      • The minimum supported version is Windows 7. Windows XP and Windows Vista are no longer supported.
      • Building the Visual Studio UWP projects requires Visual Studio 2017 with a version of the Windows 10 SDK installed.
      • When using "@compat=host", on versions below Windows 10 version 1703, 6 locales have date and number formatting issues (#13119).
      • The LCID conversion APIs don't round-trip Kurdish (ku) and Central Kurdish (ckb) due to Windows not having a ckb locale (#20181).
    • Windows using the ICC compiler:
      • Source File Encoding. The ICC compiler does not recognize the /utf-8 option. A work-around is known and reported to succeed. (#13251)
    • IBM z
      • xlC C/C++ does not currently support a sufficient subset of C++11 (#13393)

    ICU4J Platform Support

    ICU4J works on Java 7 and on Android API level 21.

    ICU4C Download

    Library version number: 65.1
    Release date: 2019-09-09 (rc)

      Source and binary downloads are available on the git/GitHub tag page: https://github.com/unicode-org/icu/releases/tag/release-65-rc

      See the Source Code Access page for how to download the ICU file tree directly from GitHub.

      ICU locale data was generated from CLDR tag release-36-alpha2

      ICU4J Download

      Library version number: 65.1
      Release date: 2019-09-09 (rc)

        Source and binary downloads are available on the git/GitHub tag page: https://github.com/unicode-org/icu/releases/tag/release-65-rc

        See the Source Code Access page for how to download the ICU file tree directly from GitHub.

        Maven dependency: [available only after final release]
        <dependency>

          <groupId>com.ibm.icu</groupId>

          <artifactId>icu4j</artifactId>

          <version>65.1</version>

        </dependency>