Index: src/header.c =================================================================== --- src/header.c (revision 871) +++ src/header.c (working copy) @@ -1798,6 +1798,7 @@ unsigned long usedByteLen = 0; UniChar uniStr[256]; unsigned long cfResult; + unsigned int i; cfResult = CFStringEncodingBytesToUnicode(kCFStringEncodingUTF8, flags, @@ -1808,6 +1809,38 @@ 255, &unicodeChars); if (cfResult == 0) { + /* vender-specific character conversion + http://www.ingrid.org/java/i18n/unicode.html */ + for (i=0; i<255; i+=2) { + if (uniStr[i] == 0x20 && uniStr[i+1] == 0x3e) { + /* OVERLINE -> FULLWIDTH MACRON */ + uniStr[i] = 0xff; uniStr[i+1] = 0xe3; + } else if (uniStr[i] == 0x20 && uniStr[i+1] == 0x14) { + /* EM DASH -> HORIZONTAL BAR */ + uniStr[i] = 0x20; uniStr[i+1] = 0x15; + } else if (uniStr[i] == 0x30 && uniStr[i+1] == 0x1c) { + /* WAVE DASH -> FULLWIDTH TILDE */ + uniStr[i] = 0xff; uniStr[i+1] = 0x5e; + } else if (uniStr[i] == 0x20 && uniStr[i+1] == 0x16) { + /* DOUBLE VERTICAL LINE -> PARALLEL TO */ + uniStr[i] = 0x22; uniStr[i+1] = 0x25; + } else if (uniStr[i] == 0x22 && uniStr[i+1] == 0xef) { + /* MIDLINE HORIZONTAL ELLIPSIS -> HORIZONTAL ELLIPSIS */ + uniStr[i] = 0x20; uniStr[i+1] = 0x26; + } else if (uniStr[i] == 0x22 && uniStr[i+1] == 0x12) { + /* MINUS SIGN -> FULLWIDTH HYPHEN-MINUS */ + uniStr[i] = 0xff; uniStr[i+1] = 0x0d; + } else if (uniStr[i] == 0x00 && uniStr[i+1] == 0xa2) { + /* CENT SIGN -> FULLWIDTH CENT SIGN */ + uniStr[i] = 0xff; uniStr[i+1] = 0xe0; + } else if (uniStr[i] == 0x00 && uniStr[i+1] == 0xa3) { + /* POUND SIGN -> FULLWIDTH POUND SIGN */ + uniStr[i] = 0xff; uniStr[i+1] = 0xe1; + } else if (uniStr[i] == 0x00 && uniStr[i+1] == 0xac) { + /* NOT SIGN -> FULLWIDTH NOT SIGN */ + uniStr[i] = 0xff; uniStr[i+1] = 0xe2; + } + } cfResult = CFStringEncodingUnicodeToBytes(scriptEncoding, flags, uniStr,