ICU 66

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

Release Overview

ICU 66 updates to Unicode 13, including new characters, scripts, emoji, and corresponding API constants. It also updates to CLDR 36.1 with Unicode 13 updates and bug fixes.

These new, extra Q1 releases are for integration by vendors that could not otherwise release their products with the newest version of Unicode. These are low-impact releases with no other significant feature additions or implementation changes. The next feature releases will be CLDR 37 and ICU 67, scheduled for 2020 April.

The intermediate ICU 66preview (2019-dec) updated to Unicode 13 beta, including new characters, scripts, emoji, and corresponding API constants. It also updated to CLDR 36.1preview with Unicode 13 updates and bug fixes.

Between the preview and the release candidate/final release there are no API changes, and no significant code changes. There were some changes in Unicode 13 data as a result of beta feedback.

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 66

Version Number

The preview had library version number 66.0.1.

The initial release has library version number 66.1.

If there are maintenance releases, they will be 66.2, 66.3, etc.

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

Common Changes

    • Unicode 13 (ICU-20893)

    • Total of 5930 new characters

      • 4 new scripts

      • 55 new emoji characters, plus additional new sequences

      • New CJK extension, first characters in plane 3: U+30000..U+3134A

  • CLDR 36.1

    • Unicode 13 root collation data and Chinese data for collation and transliteration

ICU4C Specific Changes

    • Fix uses of u8"literals" broken by C++20 introduction of incompatible char8_t type. (ICU-20972)

ICU4J Specific Changes

    • None

Known Issues

Common Issues

    • None yet.

ICU4C (same as for ICU 65)

    • 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)

ICU4J

  • None yet.

Migration Issues (same as for ICU 65)

  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-20601, icu/pull/759)

    1. Some C++ functions now return covariant (same-as-this) pointer types. (ICU-20783)

    2. 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

        1. Note that RuleBasedBreakIterator::clone() now returns a pointer to RuleBasedBreakIterator not to BreakIterator.

      3. Your subclass (MyBreakIterator) defines clone() as returning a pointer to the base class (BreakIterator).

      4. 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).

      5. To fix this, please change your subclass to return a pointer to the immediate parent (RuleBasedBreakIterator) or to itself (MyBreakIterator).

  2. 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++".

    1. 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.

    2. All of the public C++ headers are guarded with the macro "U_SHOW_CPLUSPLUS_API". (ICU-20578)

    3. 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).

    4. 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: 66.1

Release date: 2020-03-11

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

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-1

ICU4J Download

Library version number: 66.1

Release date: 2020-03-11

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

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

Maven dependency:

<dependency>

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

<artifactId>icu4j</artifactId>

<version>66.1</version>

</dependency>