sites). Although many pages only use ASCII characters to display content, few websites now declare their encoding to only be ASCII instead of UTF-8. Over a third of the languages tracked have 100% UTF-8 use. For local text files UTF-8 usage is less prevalent, where a few legacy single-byte (and a few CJK multi-byte) encodings remain in use to some degree. The primary cause for this is a few text editors that refuse to use UTF-8 when processing files, unless the first bytes of the file encode a byte order mark character (BOM). However, as most text editors correctly do not require a BOM, they often do not insert a BOM at the start of files they save, causing compatibility issues with such editors. To support editors that expect a BOM, a BOM must be added manually to the start of the file. Many other text editors simply assume a UTF-8 encoding for all files due to its nigh-ubiquity. As of current Windows versions (since Windows 10), Windows Notepad defaults to writing UTF-8 without a BOM (a change since ), bringing it into line with most other text editors. With regard to system files, some system files on Windows 11 require UTF-8 with no requirement for a BOM, and almost all files on macOS and Linux are required to be UTF-8 without a BOM. Java 18 defaults to reading and writing files as UTF-8, and in older versions (e.g. LTS versions) only the NIO API was changed to do so. Many other programming languages default to UTF-8 for I/O, including Ruby 3.0 and R 4.2.2. All currently supported versions of Python support UTF-8 for I/O, even on Windows (where it is opt-in for the open() function), and plans exist to make UTF-8 I/O the default in Python 3.15 on all platforms. Usage of UTF-8 within software is also lower than in other areas as UTF-16 is often used instead. This occurs particularly in Windows, but also in JavaScript, Python, Qt, and many other cross-platform software libraries. Compatibility with the Windows API is the primary reason for this, though the belief that direct indexing of the BMP improves speed was also a factor. More recent software has started to use UTF-8 almost exclusively: The default string primitive in Go, Julia, Rust, Swift 5, and PyPy uses UTF-8; a future version of Python is planned to store strings as UTF-8; and modern