pandanoir / gakushu

technical topics that I wanna know
0 stars 0 forks source link

文字コードとは? #1

Closed pandanoir closed 4 years ago

pandanoir commented 4 years ago

なんか漠然としか知らんので。

文字化けとは? ファイルにどう保存されてる? プログラムはリテラルで渡されたあとにどう文字列を持っている? その他なんか適当に

pandanoir commented 4 years ago

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt

charCodeAtはその位置の文字のUTF-16コードを返すらしい。

pandanoir commented 4 years ago

Base64

あるビット列を変換するもの。元の文字列の文字コードは関係なさそう。

  1. ビット列を6ビットずつに分割
  2. 最後の要素が6ビットに満たなければ6ビットになるまで末尾に0を追加
  3. 4ビットずつ変換テーブルを用いて変換
  4. 長さが4の倍数になるよう末尾に=を追加

JSだとwindow.btoaでエンコード、atobでデコードできる

pandanoir commented 4 years ago

https://jsprimer.net/basic/string-unicode/

ファイルの文字コードとJS内部の文字コードは関連がないらしい。JS内部はUnicode使ってる。 それはそれとしてJSはUnicodeとして読み取ろうとするからShift-JISとかで書くと普通に文字化けする。

pandanoir commented 4 years ago

Unicode: 文字コード UTF-8: Unicodeのエンコード方式

らしい。で、JSではUTF-16でエンコードしてるらしい

→つまりUTF-8でエンコードされたものがUnicodeということか?

pandanoir commented 4 years ago

文字化けはエンコード方式の違いのほかに、システムがあるサイズの文字コードだけ扱おうとしているケースなどでも起こりうるらしい。まあ文字コードの違いが一番頻繁だろうけど。

pandanoir commented 4 years ago

まとめ

JS内部の文字コードはUnicode固定

JSは内部では文字コードとしてUnicodeを使用している。JSプログラムが書かれたファイルの文字コードが何であろうとUnicodeを使っている。他の言語については特に調べていないが、おそらくほかも同様だろう(ファイルに依存した実装は非常に不安定になるので)。