Character encoding in Generation II

The Generation II games use a proprietary character encoding to store text data. The Generation II encoding is largely similar to the Generation I encoding. Versions of the games in different languages may use different encodings, some more different than others.

Character sets
Technically, all characters before 0x60 function as control characters. An asterisk (*) denotes a character that is explained in the control characters section below.

English
Only a few control characters below 0x50 are actually used in the English games, all of which are ones marked below with an asterisk (for more, see the control characters section further down where they are explained). The sub-0x50 characters that are not marked with an asterisk are artifacts of the Japanese control characters that print other characters with a diacritic.
 * {| style="text-align: center; border-collapse: collapse" cellpadding="2px" width="375px"

! || -0 || -1 || -2 || -3 || -4 || -5 || -6 || -7 || -8 || -9 || -A || -B || -C || -D || -E || -F ! 0- ! 1- ! 2- ! 3- ! 4- ! 5- ! 6- ! 7- ! 8- ! 9- ! A- ! B- ! C- ! D- ! E- ! F-
 * ? || B || C || D || E || F || G || H || I || J || K || L || M || N || O || P
 * Q || R || S || T || * || * || * || X || Y || Z || ( || ) ||: ||; || [ || *
 * q || r || * || * || * || * || w || x || y || z ||  ||   ||   ||   ||   ||
 * Ä || Ö || Ü || ä || ö || * || * || * || * || * ||  ||   ||   ||   ||   || *
 * Z || ( || ) || ":" ||  ||   ||   ||   ||   || * || * || * || * || 'r || * || *
 * style="background: #000" | || ▲ || Character 0x62 ii.png || D || E || F || G || H || I || V || S || L || M ||: || ぃ || ぅ
 * PO || Ké || “ || ” || ・ || … || ぁ || ぇ || ぉ || colspan=6 | text box borders ||
 * A || B || C || D || E || F || G || H || I || J || K || L || M || N || O || P
 * Q || R || S || T || U || V || W || X || Y || Z || ( || ) ||: ||; || [ || ]
 * a || b || c || d || e || f || g || h || i || j || k || l || m || n || o || p
 * q || r || s || t || u || v || w || x || y || z ||  ||   ||   ||   ||   ||
 * Ä
 * Ö
 * Ü
 * ä
 * ö
 * ü
 * 'd || 'l || 'm || 'r || 's || 't || 'v ||  ||   ||   ||   ||   ||   ||   ||   || ←
 * ' || PK || MN || - ||  ||   ||? ||! || . || & || é || → || ▷ || ▶ || ▼ || ♂
 * || × || . || / ||, || ♀ || 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9
 * }

Japanese

 * {| style="text-align: center; border-collapse: collapse" cellpadding="2px" width="375px"

! || -0 || -1 || -2 || -3 || -4 || -5 || -6 || -7 || -8 || -9 || -A || -B || -C || -D || -E || -F ! 0- ! 1- ! 2- ! 3- ! 4- ! 5- ! 6- ! 7- ! 8- ! 9- ! A- ! B- ! C- ! D- ! E- ! F-
 * ? || イ゛ || ヴ || エ゛ || オ゛ || ガ || ギ || グ || ゲ || ゴ || ザ || ジ || ズ || ゼ || ゾ || ダ
 * ヂ || ヅ || デ || ド || * || * || * || ネ゛ || ノ゛ || バ || ビ || ブ || ボ || * || * || *
 * ィ゛ || あ゛ || * || * || * || * || が || ぎ || ぐ || げ || ご || ざ || じ || ず || ぜ || ぞ
 * だ || ぢ || づ || で || ど || * || * || * || * || * || ば || び || ぶ || べ || ぼ || *
 * パ || ピ || プ || ポ || ぱ || ぴ || ぷ || ぺ || ぽ || * || * || * || * || も゜ || * || *
 * style="background: #000" | || ▲ || Character 0x62 ii.png || D || E || F || G || H || I || V || S || L || M ||: || ぃ || ぅ
 * 「 || 」 || 『 || 』 || ・ || ・・・ || ぁ || ぇ || ぉ || colspan=6 | text box borders ||
 * ア || イ || ウ || エ || オ || カ || キ || ク || ケ || コ || サ || シ || ス || セ || ソ || タ
 * チ || ツ || テ || ト || ナ || ニ || ヌ || ネ || ノ || ハ || ヒ || フ || ホ || マ || ミ || ム
 * メ || モ || ヤ || ユ || ヨ || ラ || ル || レ || ロ || ワ || ヲ || ン || ッ || ャ || ュ || ョ
 * ィ || あ || い || う || え || お || か || き || く || け || こ || さ || し || す || せ || そ
 * た || ち || つ || て || と || な || に || ぬ || ね || の || は || ひ || ふ || へ || ほ || ま
 * み || む || め || も || や || ゆ || よ || ら || り || る || れ || ろ || わ || を || ん || っ
 * ゃ || ゅ || ょ || ー || ゜ || ゛ ||? ||! || . || ァ || ゥ || ェ || ▷ || ▶ || ▼ || ♂
 * 円 || × || . || / || ォ || ♀ || 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9
 * }

Control characters
The characters on a gray background below are not naturally used in the games.

Uses
Strings using this character encoding are found in various places, including the save data structure in RAM and the Trainer data structure and the below examples in ROM.

Species names
The names of all the Pokémon are stored in a simple list of 256 strings. In international versions, each entry is 10 bytes, while in Japanese versions, they are 5 bytes. If a name takes less than its full allotted length, it is terminated by.

The first name in the list is while the last is ?????. The game looks up a Pokémon's name by receiving its index number, decrementing it by 1, and then looking for that index in the list. So while Bulbasaur's index number is 1, the game will find Bulbasaur's name at index 0 in the list (the first entry). These names are used for a variety of things, such as naming wild Pokémon and diplaying the species name in the Pokédex and on summary screens.

The following are ROM offsets for the start of the list in each game: