#author("2023-03-29T13:25:31+09:00","default:irrp","irrp") →データ処理関連 #contents *サブトピック [#v7077973] -Shift-JISコード -JISコード -[[Unicode]] *一般 [#ya7ccd43] -[[文字コードの世界の第一歩 - KAKEHASHI Tech Blog>https://kakehashi-dev.hatenablog.com/entry/2023/03/29/100000]] 2023.3 -[[目に見えない文字を悪用してサイトを好き放題荒らされた話 - Qiita>https://qiita.com/laineus/items/2d168a57fdbf7cd7c9c3]] 2022.12 -[[PythonでUnicodeコードポイントと文字を相互変換(chr, ord, \x, \u, \U) | note.nkmk.me>https://note.nkmk.me/python-chr-ord-unicode-code-point/]] 2022. -[[Pythonで学ぶ文字コード - Qiita>https://qiita.com/ny7760/items/d9c247781a790210936d]] 2022.9 -[[i18n g11n l10n m17n とは何なのかまとめてみた - mabots' blog>https://mabots.hatenablog.com/entry/20120214/1329225300]] 2012 i18n internationalization 国際化 l10n localization 地域化 m17n multilingalization 多言語化 g11n globalization グローバル化(m17nの別名) -[[「コピペできない文章」がコピペできなかった理由>http://tech.nitoyon.com/ja/blog/2012/04/23/why-uncopyable/]] 2012.4.23 --[[絶対にコピペできない文章を作ったった>http://tech.nitoyon.com/ja/blog/2012/04/20/uncopyable/]] 2012 -[[改行コードmemo>http://seclan.dll.jp/cccrlf.htm]] -[[ウェブマスターのための文字化け講座>http://www.shtml.jp/mojibake/index.html]] -[[似た文字同士にご用心>http://blog.livedoor.jp/dankogai/archives/51043693.html]] --とにかくUnicodeには記号が多い。Glyphを見ただけでは区別がつかないものも多い。こういう時にはPerlのunicoreディレクトリ以下のファイルは結構役に立つ。 -[[Vistaの新文字セットが引き起こすトラブル>http://itpro.nikkeibp.co.jp/99/vista/index.html]] --Vistaで採用される文字セットJIS X0213:2004(JIS2004)では新たに900の文字が追加される→従来のOSとのデータ交換に問題が生じる --参考URL:http://d.hatena.ne.jp/kazama/20061124/p1 *文字コードの変換 [#l01bc9c1] -[[【linux】ファイルの文字コードを変換する。vi、iconv、nkf (nkfの文字コード判定とか一括変換は便利) - tweeeetyのぶろぐ的めも>https://www.tweeeety.blog/entry/2014/12/17/230611]] 2014 -[[WindowsのPowerShellで複数のファイルの文字コードを一括変換する:Tech TIPS - @IT>https://atmarkit.itmedia.co.jp/ait/articles/0804/18/news155.html]] 2008 -[[バッチファイルでCSVの文字コードを「Shift-JIS→UTF-8」に変換したい>https://teratail.com/questions/171691]] 2019 powershell -Command "get-content data1.csv | Set-Content -Encoding UTF8 data2.csv" または @echo off :Shift_JIS -> UTF-8 setlocal enabledelayedexpansion for %%f in (%*) do ( echo %%~ff| findstr /l /e /i ".txt .csv" if !ERRORLEVEL! equ 0 ( powershell -nop -c "&{[IO.File]::WriteAllText($args[1], [IO.File]::ReadAllText($args[0], [Text.Encoding]::GetEncoding(932)))}" \"%%~ff\" \"%%~ff.utf8%%~xf\" ) ) *文字コードの判定 [#of213843] -真面目に文字コード判定をするのが嫌で、完全ではないがだいたい判定出来ればよい、という場合の手抜き文字コード判定のアイデア --JavaなどでSJIS→UTF8変換をしたとき、うまく変換できないデータは「?」に変わってしまうことを利用する。 --例えばSJISかUTF8かどちらかであることがわかっている文字列の文字コードがどちらかを判定したい場合、まずとりあえず判定したい文字列をSJISであると仮定し、UTF8へ変換をかける。 --次にUTF8へ変換した結果をそのままSJISに変換する。これは最初の元データ(判定したいデータ)のSJISとは別バッファに入れる。 --最後に最初に変換元にしたSJISのバイト配列とUTF8へ行ってこいの変換をしたバイト配列を比較し、同じだったらSJIS、違っていたらUTF8と判定する。 --ただしこのとき、SJISでもUTF8に行ってこい変換をしたら変わってしまう文字(たとえば「〜」など)については考慮が必要。 --言うまでもなく、この方法で100%判定できるわけではない。だいたいできることが多い、というだけ。 -[[juniversalchardet>http://java.akjava.com/library/juniversalchardet]] --http://code.google.com/p/juniversalchardet/ --オープンソースの文字コード判定ライブラリ -[[UTF8とSHIFT-JISの判別し方>http://info-utakura.blogspot.jp/2012/08/utf8shift-jis.html]] 2013.7.4 --UTF8は以下の5つパターンに収束する。 (1)c2〜df+80〜bf 2バイト (2)e0〜ef+80〜bf+80〜bf 3バイト (3)f0〜f7+80〜bf +80〜bf +80〜bf 4バイト (4)f8〜fb+80〜bf +80〜bf +80〜bf +80〜bf 5バイト (5)fc〜fd+80〜bf +80〜bf +80〜bf +80〜bf +80〜bf 6バイト --(3)〜(5)のパターン、すなわち0xf0〜0xfdが出てきたらUTF8で即確定 --(あ)が出てきたらSHIFT-JIS。UTF8では(あ)のコードはいきなり出てこないから。 --0xa0〜0xc1が出てきたときは、半角カタカナなのでSHIFT-JIS。 --(2)のコードはSHIFT-JISでも存在しうるが、その範囲は第二水準であり、しかも次の1バイトが第1水準及び半角カタカナとなるため、事実上その並びが普通のファイルで出てくることはほとんどありえない。だからここはUTF8。 --残りは(1)。0xc2〜0xdfは半角カタカナと重複するからここだけでは判別できない。 2バイト目が0x80〜0x9fならSHIFT-JISの第1バイトかもしれない。したがって、この先を更に読み続け、どちらかの文字コード範囲として矛盾が出てきた時点でその可能性を排除する、という方法しかない。ただし、場合によっては、UTF8とSHIFT-JISの双方でありえる可能性もある。 --ということで、完全自動の文字コード認識は不可能という話。 -[[読み込むファイルがシフトJISかUTF-8かを見分けたい>http://www.gizcollabo.jp/vbtomo/boards/vbhajikari_spread_3536.html]] 2013.6 ただし、データの内容によっては、ある程度判断できる場合もあります。 いくつか例を挙げてみると…… (1)先頭3バイトが &HEF, &HBB, &HBF の並びであった場合 → UTF-8 です。(BOM付き) (2)すべてのバイトが、&H80 未満の値で構成されていた場合 → Shift_JIS / UTF-8 のいずれとしてみた場合も、同じ文字列を意味します。 (3)「&H00〜&H7Fのいずれか」の1バイト後に、「&H80〜&HBFのいずれか」がある場合 → Shift_JIS です。 (4)「&HC0〜&HDFのいずれか」の1バイト後に、「&H80〜&HBF以外」のデータが来た場合 → Shift_JIS です。 (5)「&HC0〜&HDFのいずれか」の2バイト後に、「&H80〜&HBFのいずれか」が来た場合 → Shift_JIS です。 (6)「&HE0〜&HEFのいずれか」の1〜2バイト後に、「&H80〜&HBF以外」のデータが来た場合 → Shift_JIS です。 (7)「&HE0〜&HEFのいずれか」の3バイト後に、「&H80〜&HBF以外」のデータが来た場合 → Shift_JIS です。 *ASCIIコード [#cbea6e72] http://www.blue.b-city.net/~gg99486/asciicode.html *EBCDIC(EBCDIK) [#ve76d657] -Extended Binary Coded Decimal Interchange Code の略。 -汎用機で使われていることが多い。 -なぜか日立だけEBCDI''K''と呼ぶらしい。理由は知らない。 *マルチバイトコード [#ne52ec4a] -[[ASCII/Multibyte to Unicode conversion>http://www.codeproject.com/useritems/ASCIIMB2UnicodeTSQL.asp]] -JISコード -Shift-JISコード -EUC((Extended UNIX Codeの略)) -Unicode --UTF-16 --UTF-8 -KEISコード **EUCの変換規則 [#yf2e6b69] |文字種|規則|長さ|h |ANK((Alphabet Numeric Kanaの略))|そのまま|1バイト| |JIS基本漢字|MSB((Most Significant Bitの略))を反転|2バイト| |半角カタカナ|0x8E+該当コード|2バイト| |JIS補助漢字|0x8F+MSB反転|3バイト| *各コードの詳細 [#m86b5c21] -JISコード -Shift-JISコード -[[Unicode]] *ツール [#hdd39ecf] -[[UTF-8対応nkf:http://www01.tcp-ip.or.jp/~furukawa/nkf_utf8/]] *参考リンク [#y86470d0] -[[HTML文字実体参照&数値文字参照一覧>https://mirai-net.jp/skill/tool/html_moji.html]] 2022.10 -[[日本語と英語でよく使う約物の種類と名称>http://coliss.com/articles/build-websites/operation/writing/237.html]] --参考:http://blog.livedoor.jp/dankogai/archives/50837229.html -[[文字コード表リンク集:http://www2.famille.ne.jp/~akio1998/l_x112.html]] -[[Windows CodePage情報:http://suika.fam.cx/~wakaba/-temp/wiki/wiki?Windows%20CodePage]]