Mojibake

From Wikipedia, the free encyclopedia
Jump to: navigation, search
The UTF-8-encoded Japanese Wikipedia article for mojibake, as displayed in the Windows-1252 encoding.

Mojibake (文字化け?) (IPA: [mod͡ʑibake]; lit. "character transformation"), from the Japanese 文字 (moji) "character" + 化け (bake) "transform", is the phenomenon of symbol aliasing, and a name for the resulting garbled text, arising from systematic errors along a text encoding-transfer-decoding chain.[1] Because of different binary representations of text, which can be partially compatible, misunderstandings commonly lead to sets of symbols being systematically replaced by completely unrelated symbols, or the generic replacement character, �, for when the binary representation is considered invalid. Each replacement can lead to more or fewer symbols, if byte lengths differ between encoding and decoding, which may depend on context, as notably UTF-8 and UTF-16 are variable length encodings.

The rendering of glyphs, which may fail irrespective of any mojibake, usually because of missing fonts, is a separate issue, not to be confused with mojibake.

Causes[edit]

To correctly reproduce the original text that was encoded, the correspondence between two things must be preserved: the encoded data, and the notion of its encoding. As mojibake is the instance of incompliance between these, it can be achieved by manipulating the data itself, or just relabling it.

Mojibake is often seen with text data that have been tagged with a wrong encoding; or not tagged at all, but moved between computers with different default encodings. A major source of trouble are communication protocols that rely on settings on each computer rather than sending or storing metadata together with the data.

The differing default settings between computers are in part due to differing deployments of Unicode among operating system families, and partly the legacy encodings' specializations for different writing systems of human languages. Whereas Linux distributions mostly switched to UTF-8 (around 2004[citation needed]) for all uses of text, Microsoft Windows still uses codepages for text files, that differ between languages. For some languages, an example being Japanese, several encodings have historically been employed, causing users to see mojibake relatively often. As a Japanese example, the word mojibake "文字化け", when encoded in UTF-8, is incorrectly displayed as "æ–‡å—化け" in software that assumes text to be in the Windows-1252 or ISO-8859-1 encodings, usually labelled Western.

A web browser may not be able to distinguish a page coded in EUC-JP and another in Shift-JIS if the coding scheme is not assigned explicitly using HTTP headers sent along with the documents, or using the HTML document's meta tags that are used to substitute for missing HTTP headers if the server cannot be configured to send the proper HTTP headers; see character encodings in HTML. Heuristics can be applied to guess at the character set, but these are not always successful.

Mojibake can also occur between what appears to be the same encodings. For example, some software by Microsoft and Eudora for Windows purportedly encoded their output using the ISO-8859-1 encoding while, in reality, using Windows-1252 that contains extra printable characters in the C1 range. These characters were not displayed properly in software complying with the ISO standard; this especially affected software running under other operating systems (e.g. Unix).

Resolutions[edit]

Applications using UTF-8 as a default encoding may achieve a greater degree of interoperability because of its widespread use and backward compatibility with US-ASCII.

The difficulty of resolving an instance of mojibake varies depending on the application within which it occurs and the causes of it. Two of the most common applications in which mojibake may occur are web browsers and word processors. Modern browsers and word processors often support a wide array of character encodings. Browsers often allow a user to change their rendering engine's encoding setting on the fly, while word processors allow the user to select the appropriate encoding when opening a file. It may take some trial and error for users to find the correct encoding.

The problem gets more complicated when it occurs in an application that normally does not support a wide range of character encoding, such as in a non-Unicode computer game. In this case, the user must change the operating system's encoding settings to match that of the game. However, changing the system-wide encoding settings can also cause Mojibake in pre-existing applications. In Windows XP or later, a user also has the option to use Microsoft AppLocale, an application that allows the changing of per-application locale settings. Even so, changing the operating system encoding settings is not possible on earlier operating systems such as Windows 98; to resolve this issue on earlier operating systems, a user would have to use third party font rendering applications.

Problems in different writing systems[edit]

English[edit]

Mojibake in English texts generally occurs in punctuation, such as em dashes (—), en dashes (–), and curly quotes (“, ”), but rarely in character text, since most encodings agree with ASCII on the encoding of the English alphabet. For example, the pound sign "£" will appear as "£" if it was encoded by the sender as UTF-8 but interpreted by the recipient as CP1252 or ISO 8859-1. If iterated, this can lead to "£", "£", etc.

Some computers did in older eras have vendor-specific encodings which caused mismatch also for English text. Commodore brand 8-bit computers used PETSCII encoding, particularly notable for inverting the upper and lower case compared to standard ASCII. PETSCII printers worked fine on other computers of the era, but flipped the case of all letters. IBM mainframes use the EBCDIC encoding which does not match ASCII at all.

Japanese[edit]

In Japanese, the phenomenon is, as mentioned, called mojibake 文字化け. It is often encountered by non-Japanese when attempting to run software written for the Japanese market.

Chinese[edit]

In Chinese, the same phenomenon is called 乱码 (Simplified Chinese) / 亂碼 (Traditional Chinese) (pinyin: Luàn mǎ, meaning chaotic code), and can occur when computerised text is encoded in one Chinese character encoding but is displayed using the wrong encoding. When this occurs, it is often possible to fix the issue by switching the character encoding without loss of data. The situation is complicated because of the existence of several Chinese character encoding systems in use, the most common ones being: Unicode, Big5, and Guobiao (with several backward compatible versions), and the possibility of Chinese characters being encoded using Japanese encoding.

An additional problem is caused when encodings are missing characters, which is common with rare or antiquated characters that are still used in personal or place names. Examples of this are Taiwanese politicians Wang Chien-shien (Chinese: 王建煊; pinyin: Wáng Jiànxuān) and Yu Shyi-kun (simplified Chinese: 游锡堃; traditional Chinese: 游錫堃; pinyin: Yóu Xíkūn), ex-PRC Premier Zhu Rongji (Chinese: 朱镕基; pinyin: Zhū Róngjī) and Taiwanese singer David Tao (Chinese: 陶喆; pinyin: Táo Zhé).[2]

Newspapers have dealt with this problem in various ways, including using software to combine two existing, similar characters; using a picture of the personality; or simply substituting a homophone for the rare character in the hope that the reader would be able to make the correct inference.

Central European[edit]

Users of Central and Eastern European languages can also be affected. Because most computers were not connected to any network during the mid- to late-1980s, there were different character encodings for every language with diacritical characters.

Mojibake caused by a song title in Cyrillic (Моя Страна) on a car audio system

Russian and other Cyrillic alphabets [edit]

Mojibake may be colloquially called krakozyabry (кракозя́бры, IPA:krɐkɐˈzʲæbrɪ̈) in Russian, which was and remains complicated by several systems for encoding Cyrillic.[3] The Soviet Union and early Russian Federation developed KOI encodings (Kod Obmena Informatsiey, Код Обмена Информацией, which translates to “Code for Information Exchange”). This began with Cyrillic-only 7-bit KOI7, based on ASCII but with Latin and some other characters replaced with Cyrillic letters. Then came 8-bit KOI8 encoding that is an ASCII extension which encodes Cyrillic letters only with high-bit set octets corresponding to 7-bit codes from KOI7. That's why KOI8 text, even Russian, remains partially readable after stripping the eighth bit, which was considered as a major advantage in the age of 8BITMIME-unaware email systems. Eventually KOI8 gained different flavors for Russian/Bulgarian (KOI8-R), Ukrainian (KOI8-U), Belarusian (KOI8-RU) and even Tajik (KOI8-T).

Meanwhile in the West, Code page 866 supported Ukrainian and Belarusian as well as Russian/Bulgarian in MS-DOS. For Microsoft Windows, Code Page 1251 added support for Serbian and other Slavic variants of Cyrillic.

Most recently, the Unicode encoding includes code points for practically all the characters of all the world's languages, including all Cyrillic characters.

Before Unicode, it was necessary to match text encoding with a font using the same encoding system. Failure to do this produced unreadable gibberish whose specific appearance varied depending on the exact combination of text encoding and font encoding. Accented vowels were symptomatic of trying to view any Cyrillic encoding with a font limited to the Latin alphabet. In general, Cyrillic gibberish was symptomatic of using the wrong Cyrillic font.

In Bulgarian, mojibake is often called maymunitsa (маймуница), meaning “monkey's alphabet”. In Serbian, it is called ђубре (đubre), meaning “trash”. Unlike the former USSR, South Slavs never used something like KOI8, and Code Page 1251 was the dominant Cyrillic encoding there before Unicode. Therefore these languages experienced fewer encoding incompatibility troubles than Russian. In the 1980s, Bulgarian computers used their own MIK encoding, which is superficially similar to (although incompatible with) CP866.

Polish[edit]

Since the ISO 8859-2 has only been created in 1987, users of various computing platforms have been using their own character encodings such as AmigaPL on Amiga, Atari Club on Atari ST and Masovia, IBM CP852, Mazovia and Windows CP1250 on IBM PCs. Polish companies selling early DOS computers created their own mutually-incompatible ways to encode Polish characters and simply reprogrammed the EPROMs of the video cards (typically CGA, EGA, or Hercules) with the needed glyphs for Polish — arbitrarily located without reference to where other computer sellers had placed them.

The situation began to improve when, after pressure from academic and user groups, ISO 8859-2 succeeded as the "Internet standard" with limited support of the dominant vendors' software (today largely replaced by Unicode). With the numerous problems caused by the variety of encodings, even today some users tend to refer to Polish diacritical characters as krzaczki ([kshach-kih], lit. "shrubs").

Western European[edit]

The alphabets of the North Germanic languages, Finnish, German, French and Spanish are all extensions of the Latin alphabet. The additional characters are typically the ones that become corrupted, making texts only mildly unreadable with mojibake:

These are languages for which the iso-8859-1 character set (also known as Latin 1 or Western) have been in use. However, iso-8859-1 have been obsoleted, by two competing standards, the backward compatible windows-1252, and the slightly altered iso-8859-15. Both adds the euro sign € and the French œ, most notably, but otherwise, any mixups of these 3 character sets do not create mojibake in these languages. Furthermore, it is always safe to interpret iso-8859-1 as windows-1252, and fairly safe to interpret it as iso-8859-15, in particular with respect to the euro sign, which replaces a never-used poor man's currency sign. However, with the advent of utf-8, mojibake has become the norm in certain scenarios, e.g. exchange of text files between Unix and Windows computers. Utf-8 reverts compatibility back to ASCII — all characters in iso-8859-1 that are not in ASCII take two bytes in utf-8.

In Swedish, Norwegian, Danish and German, vowels are rarely repeated, and it is usually obvious when one character gets corrupted, such as the second letter in "kÃ⁠¤rlek" (kärlek, "love"). This way, even though the reader has to guess between å, ä and ö, almost all texts remain legible. Finnish text, on the other hand, does feature repeating vowels in words like hääyö ("wedding night") which can sometimes render text very hard to read (e.g. hääyö appears as "hÃ⁠¤Ã⁠¤yÃ⁠¶"). Icelandic and Faroese have ten and eight possibly confounding characters, respectively, which thus can make it more difficult to guess corrupted characters; Icelandic words like þjóðlöð ("outstanding hospitality") become almost entirely unintelligible when rendered as "þjóðlöð".

In German, Buchstabensalat ("letter salad") is a common term for this phenomenon, and in Spanish, deformación (literally deformation).

Some users transliterate their writing when using a computer, either by omitting the problematic diacritics, or by using digraph replacements (å -> aa, ä/æ -> ae, ö/ø -> oe, etc.). Thus, an author might write "ueber" instead of "über". The latter practice seems to be better tolerated in the German language sphere than in the Nordic countries. For example, in Norwegian, digraphs are associated with archaic Danish, and may be used jokingly. However, digraphs are useful in communication with other parts of the world. As an example, the Norwegian football player Ole Gunnar Solskjær had his name spelled "SOLSKJAER" on his back when he played for Manchester United.

An artifact of UTF-8 misinterpreted as ISO-8859-1, "Ring meg nå", was seen in an SMS scam raging in Norway in June 2014.[4]

Asian encodings[edit]

Another type of mojibake occurs when text is erroneously parsed in a multi-byte encoding, such as one of the east Asian encodings. With this kind of mojibake more than one (typically two) characters are corrupted at once, e.g. "k舐lek" (kärlek) in Swedish, where "är" is parsed as "舐". Compared to the above mojibake, this is harder to read, since letters unrelated to the problematic å, ä or ö are missing, and is especially problematic for short words starting with å, ä or ö such as "än" (which becomes "舅"). Since two letters are combined, the mojibake also seems more random (over 50 variants compared to the normal three, not counting the rarer capitals). In some rare cases, an entire text string which happens to include a pattern of particular word lengths, such as the sentence "Bush hid the facts", may be misinterpreted.

Countries of the former Yugoslavia[edit]

Slavic languages of former Yugoslavia (Croatian, Bosnian, Serbian) add to the basic Latin alphabet the letters š, đ, č, ć, ž, and their capital counterparts Š, Đ, Č, Ć, Ž. All of these letters are defined in Latin-2 and Windows-1250, while only some (š, Š, ž, Ž, Đ) exist in the usual OS-default Western, and are there because of some other languages.

Although even those that exist in extended Western ASCII (Windows-1252) are not immune to errors, the ones that don't are much more prone to errors. Thus, even nowadays, "šđčćž ŠĐČĆŽ" is all too often interpreted as "šðèæž ŠÐÈÆŽ", making the users wonder where ð, è, æ, È, Æ are used.

When confined to basic ASCII (most user names, for example), common replacements are: š→s, đ→dj, č→c, ć→c, ž→z (capital forms analogously, with Đ→Dj or Đ→DJ depending on word case). All of these replacements introduce ambiguities, so reconstructing the original from such a form is usually done manually if required.

Importance of Windows-1252 encoding is high because English versions of the Windows operating system are most widespread, not the localized ones. The reasons for this are

  • Relatively small and fragmented market, increasing price of high quality localization.
  • High degree of software piracy (in turn caused by high price of software compared to income), thus discouraging localization efforts.
  • People prefer English version of OS and other software .[citation needed]

The drive of differentiating Croatian from Serbian, Bosnian from Croatian and Serbian, and now even Montenegrin from the other three creates many problems. There are many different localizations, using different standards, and of different quality. There are no common translations for the vast amount of computer terminology originating in English. In the end, people use adopted English words (kompjuter-computer, kompajlirati-compile, etc.), and if they are unaccustomed to the translated terms may not understand what some option in a menu is supposed to do based on the translated phrase. Therefore, the people who understand English, as well as those who are accustomed to English terminology (which are most, because English terminology is also mostly taught in schools because of these problems) regularly choose the original English versions of non-specialist software.

When Cyrillic script is used (for Macedonian and partially Serbian language), the problem indeed is similar to other Cyrillic-based scripts.

Newer versions of English Windows allow ANSI codepage to be changed (older versions like Win95 require special English versions with this support), but this setting can and often were incorrectly set (for example, Windows 98/Me can be set to most non-RTL SBCS codepages including 1250, but only at install time).

Hungarian[edit]

Hungarian is another affected language, which uses the 26 basic English characters, plus the accented forms á, é, í, ó, ú, ö, ü (all present in the Latin-1 character set), plus the 2 characters ő and ű, which are not in Latin-1. These 2 characters can be correctly encoded in Latin-2, Windows-1250 and Unicode. Before Unicode became common in e-mail clients, e-mails containing Hungarian text often had the letters ő and ű corrupted, sometimes to the point of unrecognizability. It is common[citation needed] to respond to an e-mail rendered unreadable by character mangling (referred to as "betűszemét", meaning "garbage lettering") with the phrase "Árvíztűrő tükörfúrógép", a nonsense phrase (literally "Flood-resistant mirror-drilling machine") containing all accented characters used in Hungarian.

Indic text[edit]

A similar effect can occur in Indic text, even if the character set used is properly recognized by the application. This is because, in many Indic scripts, the rules by which individual letter symbols combine to create symbols for syllables may not be properly understood by a computer missing the appropriate software, even if the glyphs for the individual letter forms are available.

A particularly notable example of this is the old Wikipedia logo, which attempts to show the character analogous to "wi" (the first syllable of "Wikipedia") on each of many puzzle pieces. The puzzle piece meant to bear the Devanagari character for "wi" instead used to display the "wa" character followed by an unpaired "i" modifier vowel, easily recognizable as mojibake generated by a computer not configured to display Indic text.[5] The logo as redesigned as of May 2010 has fixed these errors.

The idea of Plain Text requires the operating system to provide a font to display Unicode codes. This font is different from OS to OS for Singhala and it makes orthographically incorrect glyphs for some letters (syllables) across all operating systems. For instance, the 'reph', the short form for 'r' is a diacritic that normally goes on top of a plain letter. However, it is wrong to go on top of some letters like 'ya' or 'la' but it happens in all operating systems. This appears to be a fault of internal programming of the fonts. In Macintosh / iPhone, the muurdhaja l (dark l) and 'u' combination and its long form both yield wrong shapes.

Some Indic and Indic-derived scripts, most notably Lao, were not officially supported by Windows XP until the release of Vista.[6] However, various sites have made free-to-download fonts.

Arabic[edit]

Another affected language is Arabic (see below). The text in general get totally unreadable when the encodings do not match.

Example[edit]

File encoding Setting in browser Result
Arabic example:
Browser rendering: الإعلان العالمى لحقوق الإنسان
UTF-8 ISO 8859-1 الإعلان العالمى لحقوق الإنسان
KOI8-R О╩©ь╖ы└ь╔ь╧ы└ь╖ы├ ь╖ы└ь╧ь╖ы└ы┘ы┴ ы└ь╜ы┌ы┬ы┌ ь╖ы└ь╔ы├ьЁь╖ы├
ISO 8859-5 яЛПиЇй�иЅиЙй�иЇй� иЇй�иЙиЇй�й�й� й�и­й�й�й� иЇй�иЅй�иГиЇй�
CP 866 я╗┐╪з┘Д╪е╪╣┘Д╪з┘Ж ╪з┘Д╪╣╪з┘Д┘Е┘Й ┘Д╪н┘В┘И┘В ╪з┘Д╪е┘Ж╪│╪з┘Ж
ISO 8859-6 ُ؛؟ظ�ع�ظ�ظ�ع�ظ�ع� ظ�ع�ظ�ظ�ع�ع�ع� ع�ظ­ع�ع�ع� ظ�ع�ظ�ع�ظ�ظ�ع�
ISO 8859-2 ا�ؼؚ�ا� ا�ؚا��� �ح��� ا�ؼ�سا�
Windows-1256 Windows-1252 ÇáÅÚáÇä ÇáÚÇáãì áÍÞæÞ ÇáÅäÓÇä
Swedish example: Smörgås
File encoding Setting in browser Result
MS-DOS 437 ISO 8859-1 Sm”rg†s
ISO 8859-1 Mac Roman SmˆrgÂs
UTF-8 ISO 8859-1 Smörgås
UTF-8 Mac Roman Smörgås
Russian example: Кракозябры
File encoding Setting in browser Result
MS-DOS 855 ISO 8859-1 Æá ÆÖóÞ¢áñ
KOI8-R ISO 8859-1 ëÒÁËÏÚÑÂÒÙ
UTF-8 KOI8-R п я─п╟п╨п╬п╥я▐п╠я─я▀

References[edit]

  1. ^ "Will Unicode soon be the universal code?" IEEE Spectrum, vol. 49, issue 7, p. 60 (July 2012). The advantage of Unicode is that if everyone adopted it, it would eradicate the problem of mojibake, Japanese for “character transformation.” Mojibake is the jumble that results when characters are encoded in one system but decoded in a her.
  2. ^ "PRC GBK (XGB)". Archived from the original on 2002-10-01.  Conversion map between Code page 936 and Unicode. Need manually selecting GB18030 or GBK in browser to view it correctly.
  3. ^ p. 141, Control + Alt + Delete: A Dictionary of Cyberslang, Jonathon Keats, Globe Pequot, 2007, ISBN 1-59921-039-8.
  4. ^ "sms-scam". June 18, 2014. Retrieved June 19, 2014. 
  5. ^ Cohen, Noam (June 25, 2007). "Some Errors Defy Fixes: A Typo in Wikipedia’s Logo Fractures the Sanskrit". The New York Times. Retrieved July 17, 2009. 
  6. ^ "Content Moved (Windows)". Msdn.microsoft.com. Retrieved 2014-02-05. 

External links[edit]