字体違いの名前合わせ

更新: 2026-11-10
検証JavaScriptopencc-jsデータ取り込み

日本語の画面の名前を、簡体字のデータの名前に突き合わせるときの手順。 opencc-js の jp → cn 変換を1回通すだけでは、合わない名前が出る。ゲームの武将の名前を取り込んだとき、6件が合わなかった。

起きること

画面の名前を変換して、データの名前と文字列が同じか調べる。

画面の名前変換後データの名前結果
趙雲赵云赵云一致
劉備刘备刘备一致
曹操曹操曹操一致
諸葛亮诸葛亮诸葛亮一致
蔡文姫蔡文姫蔡文姬不一致
馬雲騄马云(U+2B627)马云禄不一致
衛瓘衞瓘卫瓘不一致
呂姫吕姫吕姬不一致
張姫张姫张姬不一致
周姫周姫周姬不一致

上の表は、取り込みのとき合わなかった6件と、最初から合っていた4件(対照)を、2026-11-10にゲームの武将データ(171人)で流し直した結果。

原因は3つの字だけ

違っていたのは、次の3つの字だった。見た目はほぼ同じなので、文字コードを並べて初めて分かる。

変換後の字データの字姫 U+59EB衞 U+885E(珍しい字) U+2B627姬 U+59EC卫 U+536B禄 U+7984姫は変換されずに残り、データの姬と別の字になる。フォントによっては、同じ形に見える
変換後の字とデータの字が違った3種類。文字コードで見ると別の字だと分かる。

手順

  1. 画面の名前を、jp → cn で1回変換する
  2. データの名前と一致するか調べる。一致しない名前だけを集める
  3. 集めた名前の文字コードを並べ、データの名前の字と見比べる
  4. 違う字を見つけたら、変換のあとに置換を足す
  5. 足したあと、最初から一致していた名前も流し直す。置換が合っていた名前を壊していないか見るためである
  6. データに無い名前は、近い名前に寄せずに入れない
画面の名前変換(1回)データと一致?採用文字コードを並べる置換を足すはいいいえ置換を足したら、最初から合っていた名前も流し直す
一致しなかった名前だけを調べる。直したあとは、合っていた名前も一緒に確かめる。

変換の書き方

import * as OpenCC from "opencc-js";

const toCn = OpenCC.Converter({ from: "jp", to: "cn" });
const fix = (s) =>
  s.replaceAll("姫", "姬").replaceAll("衞", "卫").replaceAll("\u{2B627}", "禄");
const match = (name) => fix(toCn(name));

U+2B627 の字は、環境によっては表示されないことがある。コードでは文字そのものでなく、コードポイントで書く。

この置換で、上の6件はすべてデータと一致した。最初から合っていた4件も、一致のままだった。

注意

  • 確かめたのは10件(合わなかった6件と、対照の4件)。 武将171人の全員で、置換が足りるかは調べていない。人数が増えたら、一致しなかった名前を同じ手順で集める
  • 名前が合っても、1人に決まるとは限らない。 蔡文姬はデータに2件(100004と102011)、周姬も2件(100032と102017)ある。同名の版が複数あるときは、コストや兵種など、名前以外で選ぶ
  • データに無い名前は入れない。 近い名前に寄せると、別の人の持ち物になる

関連

WIKI一覧へ