rabbit-slide-tommy-mojibake 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e6b3c4463895185375cbd44b8524a4cb53efe445
4
+ data.tar.gz: 603591f36e1b03757ffa03ff85aff2a443d523ae
5
+ SHA512:
6
+ metadata.gz: 6154c5e79659a6fb5d5629a3c86d8339b0d646f83205c072b3d323721aaff69bd031171ed272a7f735ab8b0b4eadc7b9937e5b06efe69df25d2ae1e367357d2e
7
+ data.tar.gz: 7fae4bb51c27bc25619b4c7135898aa0405042d2d76d24f3bc6e48f04c38388c4d17f4dde3d084a2a263aea63a1c8c701720d9269758bf24b1328cc634d881b1
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ mojibake.rab
data/MyBooks.jpg ADDED
Binary file
data/README.rd ADDED
@@ -0,0 +1,24 @@
1
+ = 文字化け
2
+
3
+ 文字化けについて
4
+
5
+ == 作者向け
6
+
7
+ === 表示
8
+
9
+ rake
10
+
11
+ === 公開
12
+
13
+ rake publish
14
+
15
+ == 閲覧者向け
16
+
17
+ === インストール
18
+
19
+ gem install rabbit-slide-tommy-mojibake
20
+
21
+ === 表示
22
+
23
+ rabbit rabbit-slide-tommy-mojibake.gem
24
+
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ # spec.add_runtime_dependency("YOUR THEME")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
data/color-emoji.png ADDED
Binary file
data/config.yaml ADDED
@@ -0,0 +1,19 @@
1
+ ---
2
+ id: mojibake
3
+ base_name: mojibake
4
+ tags: []
5
+ presentation_date:
6
+ version: 1.0.0
7
+ licenses: []
8
+ slideshare_id: mojibake-49053739
9
+ speaker_deck_id:
10
+ ustream_id:
11
+ vimeo_id:
12
+ youtube_id:
13
+ author:
14
+ markup_language: :rd
15
+ name: "とみたまさひろ"
16
+ email: tommy@tmtm.org
17
+ rubygems_user: tommy
18
+ slideshare_user: tmtm
19
+ speaker_deck_user:
data/icon.jpg ADDED
Binary file
data/lavie.png ADDED
Binary file
data/mojibake.png ADDED
Binary file
data/mojibake.rab ADDED
@@ -0,0 +1,496 @@
1
+ = 文字化け
2
+
3
+ # : subtitle
4
+ # サブタイトル
5
+ : author
6
+ とみたまさひろ
7
+ # : institution
8
+ # 所属
9
+ : content-source
10
+ bitの会
11
+ : date
12
+ 2015-06-06
13
+ : allotted-time
14
+ 30m
15
+ : theme
16
+ clear-blue+
17
+
18
+ = 自己紹介
19
+
20
+ # image
21
+ # src = icon.jpg
22
+ # relative-height = 30
23
+ # align = right
24
+ # relative-margin-top = -30
25
+ # relative-margin-right = -10
26
+
27
+ * とみた まさひろ
28
+ * 長野県北部在住プログラマー
29
+ * 言語: C(('note:(1989〜)')) Ruby(('note:(1998〜)'))
30
+ * 日本MySQLユーザ会代表
31
+ * 長野ソフトウェア技術者グループ(NSEG)
32
+
33
+ = 自己紹介
34
+
35
+ * http://((*tmtms*)).hatenablog.com
36
+ * http://twitter.com/((*tmtms*))
37
+ * https://github.com/((*tmtm*))
38
+ * MySQL 3.21 の日本語対応 (('note:(1998 )'))
39
+ * MySQLのRubyバインディング作成 (('note:(1998 )'))
40
+
41
+ = 執筆書籍
42
+
43
+ # image
44
+ # src = MyBooks.jpg
45
+ # relative-width = 95
46
+
47
+ = 自己紹介
48
+
49
+ * もっともRTされたツイート
50
+
51
+ # image
52
+ # src = サンチーム.png
53
+ # relative-height = 100
54
+
55
+ = 自己紹介
56
+
57
+ * もっともブクマされたブログ
58
+
59
+ # image
60
+ # src = メールアドレス正規表現.png
61
+ # relative-height = 90
62
+
63
+ = 宣伝その1 NSEG
64
+
65
+ * http://nseg.jp
66
+ * 長野のIT技術者のゆるい集まり
67
+ * 2010年2月発足\n(('note:(発起人:おびなたさん、しむやさん、おかもとさん)'))
68
+ * 毎月勉強会開催(今までに63回)主に長野市
69
+ * 「理論から学ぶデータベース実践入門」読書会(隔週水曜日) at ギークラボ長野
70
+
71
+ = 宣伝その2 ギークラボ長野
72
+
73
+ # image
74
+ # src = pepper.png
75
+ # relative-height = 50
76
+ # align = right
77
+ # relative-margin-right = -10
78
+
79
+ * http://geeklab-nagano.com
80
+ * 県庁近く
81
+ * 無料で利用できる作業スペース
82
+ * 電源 & WiFi & Pepperくん あり
83
+ * 6/13 ハンズオン「はじめての Unity 〜2D ゲームを作ってみよう〜」
84
+
85
+ = 文字化け
86
+
87
+ = 文字化けに関するトラブルシューティング
88
+
89
+ # image
90
+ # src = mojibake.png
91
+ # relative-height = 90
92
+
93
+ (('note:http://www.geocities.co.jp/Playtown/7711/gallaly/trableshooting.html'))
94
+
95
+ = 文字化けを直してみた
96
+
97
+ 残念ながら現バージョンのWindowsでは
98
+ 文字化けをなおすことは出来ません。
99
+ 2025年発売予定のWindowsでは対応します。
100
+ このトラブルシューティングでは、
101
+ このような問題の原因を突き止め、
102
+ 問題を解決する手順を示します。
103
+ 質問の答えをクリックしてください。
104
+ 手順に従って進みながら問題を解決できます。
105
+
106
+ どうしますか?
107
+
108
+ □ 仕方がないから「ダイアログで遊ぼう」を閲覧。
109
+ □ 「渡部シンイチのDejavu WORLD」を閲覧。
110
+
111
+ = 文字化けの原因\n\n1. 文字コードが正しくない
112
+
113
+ = 文字コード
114
+
115
+ * Charset, 文字集合
116
+ * エンコーディング方式
117
+ * シフトJIS, 日本語EUC, UTF-8 等
118
+ * 文字のバイト表現
119
+
120
+ = 日本語の文字コード
121
+
122
+ * UTF-8 (Unicode 今は普通はこれ)
123
+ * SHIFT_JIS (Windows)
124
+ * EUC-JP (昔の UNIX)
125
+ * ISO-2022-JP (メール)
126
+
127
+ = 同じ文字でも異なるコード
128
+
129
+ 「あ」
130
+
131
+ * UTF-8 (E3 81 82)
132
+ * EUC-JP (A4 A2)
133
+ * SHIFT_JIS (82 A0)
134
+
135
+ = 同じバイト列でも別の文字
136
+
137
+ C2 A9
138
+
139
+ * UTF-8 「©」
140
+ * EUC-JP 「息」
141
+ * SHIFT_JIS 「ツゥ」
142
+
143
+ = バイト列だけでは\n文字コードはわからない
144
+
145
+ = ところで
146
+
147
+ 日本語文字のことを「((*2バイト文字*))」と言ってませんか?
148
+
149
+ UTF-8は日本語はだいたい((*3バイト*))
150
+
151
+ * 「あ」(E3 81 82)
152
+ * 「ア」(EF BD B1)
153
+
154
+ = 文字化けした文字列の\n元の文字コードの見分け方
155
+
156
+ = 慣れるとパッと見でわかる
157
+
158
+ = EUC-JP を SHIFT_JIS として表示
159
+
160
+ # image
161
+ # src = mojibake.png
162
+ # align = right
163
+ # relative-width = 50
164
+ # relative-margin-top = -10
165
+ # relative-margin-right = -10
166
+
167
+ 半角カナが多い
168
+
169
+ 日本語にほんごニホンゴ
170
+
171
+ ニ?ワク?ヒ、ロ、?エ・ヒ・ロ・?エ
172
+
173
+ = UTF-8 を SHIFT_JIS として表示
174
+
175
+ 画数の多い漢字の中に半角カナが少々混じってる
176
+
177
+ 日本語にほんごニホンゴ
178
+
179
+ 譌・譛ャ隱槭↓縺サ繧薙#繝九?繝ウ繧エ
180
+
181
+
182
+ = ISO-2022-JP の ESC 落ち
183
+
184
+ ASCII文字だけで構成されて「$B」「(B」がある
185
+
186
+ 日本語にほんごニホンゴ
187
+
188
+ ?$BF|K\8l$K$[$s$4%K%[%s%4?(B
189
+
190
+ = 文字化けの原因\n\n2. 文字コードが不明
191
+
192
+ = 自動判定もできるけど\n完全じゃない
193
+
194
+ = 同じバイト列でも別の文字(再掲)
195
+
196
+ C2 A9
197
+
198
+ * UTF-8 「©」
199
+ * EUC-JP 「息」
200
+ * SHIFT_JIS 「ツゥ」
201
+
202
+ = 自動判定
203
+
204
+ * バイト列が文字コードの正当な範囲にあるかどうかで判定
205
+ * 文字列が短いと難しい
206
+ * 文字列が長ければ精度は上がる
207
+ * へんなバイトが混在してたらアウト
208
+ * 日本語じゃないのに日本語と誤判定したり
209
+
210
+ = EUC - Extended Unix Code
211
+
212
+ * EUC-JP : 日本語EUC
213
+ * EUC-KR : 韓国語EUC
214
+ * EUC-CN : 簡体字中国語EUC
215
+
216
+ 文字コードの範囲は同じだけど文字が違う
217
+
218
+ * BB FA : 字(JP) / 샙(KR) / 机(CN)
219
+
220
+ = 文字境界
221
+
222
+ * EUC
223
+ * (('tag:small:1バイト文字 (00-7F) ← ASCII'))
224
+ * (('tag:small:2バイト文字 (A1-F4 | A1-FE)'))
225
+ * (('tag:small:文字列の先頭から見ないとわからない'))
226
+ * SHIFT_JIS
227
+ * (('tag:small:1バイト文字 (00-7F A1-DF) ← JISX0201'))
228
+ * (('tag:small:2バイト文字 (81-9F E0-FC | 40-7E 80-FC)'))
229
+ * ((*(('tag:small:2バイト目に ASCII 範囲含んでてやばい'))*))
230
+
231
+ = 文字境界
232
+
233
+ * UTF-8
234
+ * (('tag:small:1バイト文字 (00-7F) ← ASCII'))
235
+ * (('tag:small:2バイト文字 (C2-DF | 80-BF)'))
236
+ * (('tag:small:3バイト文字 (E0-EF | 80-BF | 80-BF)'))
237
+ * (('tag:small:4バイト文字 (F0-F7 | 80-BF | 80-BF | 80-BF)'))
238
+
239
+ 文字境界判別しやすい
240
+
241
+ = 文字化けの原因\n\n3. 機種依存文字
242
+
243
+ = ISO-2022-JP
244
+
245
+ * いわゆる「JISコード」
246
+
247
+ * 日本語メールで使われる文字コードは未だに ISO-2022-JP が主流
248
+
249
+ * \ と ¥ を使い分けできる
250
+
251
+ * ISO-2022-JP に無い文字
252
+
253
+ * ① ② ③ Ⅰ Ⅱ Ⅲ ㈱ ㎏ ㎝ 髙 﨑 カタカナ
254
+
255
+ = ISO-2022-JP に無い文字を ISO-2022-JP と偽ってメールする奴がいる
256
+
257
+ = 文字化け
258
+
259
+ = 昔の Mac だと ① が ㈪ に見えたり
260
+
261
+ = だいたいマイクロソフトが悪い
262
+
263
+ = MS の ISO-2022-JP
264
+
265
+ * CP50221
266
+ * ISO-2022-JP に無い文字を含む
267
+ * ① ② ③ Ⅰ Ⅱ Ⅲ ㈱ ㎏ ㎝ 髙 﨑 カタカナ
268
+ * \ と ¥ の区別がつかない
269
+
270
+ = まともなメールアプリが「ISO-2022-JP」を信じると文字化け
271
+
272
+ = まともなメールアプリが責められる\n「Outlookだと見えるのに」
273
+
274
+ = ISO-2022-JP は CP50221 と\nみなして表示
275
+
276
+ = ISO-2022-JP を ISO-2022-JP として扱うアプリが絶滅
277
+
278
+ = 文字コードの置き換え
279
+
280
+ * ISO-2022-JP : CP50221
281
+ * EUC-JP : CP51932
282
+ * SHIFT_JIS : CP932
283
+
284
+ = だいたいマイクロソフトが悪い
285
+
286
+ = 文字化けの原因\n\n4. フォントが無い
287
+
288
+ = 🍣 🍺 🍮 🍢 🍜 🍶
289
+
290
+ = □ □ □ □ □ □
291
+
292
+ = 対応フォント入れれば解決
293
+
294
+ = 発表の途中ですがお知らせです
295
+
296
+ = FAQ: 下のウサギとカメは何?
297
+
298
+ = Rabbit
299
+
300
+ # image
301
+ # src = lavie.png
302
+ # align = right
303
+ # relative-height = 50
304
+ # relative-margin-top = -15
305
+ # relative-margin-right = -20
306
+
307
+ * Ruby製プレゼンツール
308
+ * http://rabbit-shocker.org/
309
+ * ウサギとカメはタイムキーパー
310
+ * カメに追い抜かされなければ時間内
311
+ * プレゼンがつまらなくても和む
312
+ * ソースはテキスト(RD / Markdown)
313
+ * PDF ビューアとしても利用可
314
+
315
+ = Ruby
316
+
317
+ = Ruby
318
+
319
+ * プログラミング言語
320
+ * オブジェクト指向スクリプト言語
321
+ * オブジェクト毎に異なる文字コードが可能
322
+ * ファイル毎に異なる文字コードが可能
323
+ * 嫌な予感…
324
+
325
+ = ファイル
326
+
327
+ 同じファイルからの読み込みでも異なる文字コードになることも
328
+
329
+ # coderay ruby
330
+
331
+ f = File.open("何か.txt", "r:utf-8")
332
+ f.gets #=> 1行文字列 UTF-8
333
+ f.read(10) #=> 10バイトデータ ASCII-8BIT
334
+
335
+ = 異なる文字コード同士
336
+
337
+ # coderay ruby
338
+
339
+ utf8 = "ほげ"
340
+ sjis = "ほげ".encode("cp932")
341
+ utf8 == sjis #=> 偽
342
+ utf8 + sjis #=> エラー
343
+ utf8 =~ /#{sjis}/ #=> エラー
344
+
345
+ utf8 = "ASCII"
346
+ sjis = "ASCII".encode("cp932")
347
+ utf8 == sjis #=> 真
348
+
349
+ = 混ぜるな危険!
350
+
351
+ = 全部 UTF-8 に統一すれば安全
352
+
353
+ = MySQL
354
+
355
+ = オープンソースの RDBMS
356
+
357
+ = 文字コード
358
+
359
+ * クライアントライブラリ
360
+ * クライアント-サーバー接続
361
+ * データベース
362
+ * テーブル
363
+ * カラム
364
+ …毎に設定可能
365
+
366
+ = 嫌な予感…
367
+
368
+ = utf8 と utf8mb4
369
+
370
+ * UTF-8 文字コード
371
+ * utf8 は 3バイトまで
372
+ * utf8mb4 は 4バイトまで
373
+ * 絵文字(🍣や🍺)は4バイト
374
+
375
+ = utf8カラムに4バイト文字を入れようとすると
376
+
377
+ 接続が utf8 の場合:
378
+
379
+ mysql> insert into t (c) values ('今日は🍣と🍺');
380
+ Query OK, 1 row affected, 1 warning (0.09 sec)
381
+ mysql> select * from t;
382
+ +-----------+
383
+ | c |
384
+ +-----------+
385
+ | 今日は |
386
+ +-----------+
387
+
388
+ = utf8カラムに4バイト文字を入れようとすると
389
+
390
+ 接続が utf8mb4 の場合:
391
+
392
+ mysql> insert into t (c) values ('今日は🍣と🍺');
393
+ Query OK, 1 row affected, 1 warning (0.09 sec)
394
+ mysql> select * from t;
395
+ +----------------+
396
+ | c |
397
+ +----------------+
398
+ | 今日は?と? |
399
+ +----------------+
400
+
401
+ = utf8mb4カラムに4バイト文字を入れようとすると
402
+
403
+ 接続が utf8mb4 の場合:
404
+
405
+ mysql> insert into t (c) values ('今日は🍣と🍺');
406
+ Query OK, 1 row affected (0.06 sec)
407
+ mysql> select * from t;
408
+ +----------------------+
409
+ | c |
410
+ +----------------------+
411
+ | 今日は🍣と🍺 |
412
+ +----------------------+
413
+
414
+ = utf8mb4カラムに4バイト文字を入れようとすると
415
+
416
+ 接続が utf8 の場合:
417
+
418
+ mysql> insert into t (c) values ('今日は🍣と🍺');
419
+ Query OK, 1 row affected, 1 warning (0.06 sec)
420
+ mysql> select * from t;
421
+ +--------------------+
422
+ | c |
423
+ +--------------------+
424
+ | 今日は????と?? |
425
+ +--------------------+
426
+
427
+ = 4バイト文字を utf8 接続から取り出すと
428
+
429
+ mysql> select * from t;
430
+ +----------------+
431
+ | c |
432
+ +----------------+
433
+ | 今日は?と? |
434
+ +----------------+
435
+
436
+ = 「?」の調査
437
+
438
+ mysql> select hex(c) from t;
439
+ +------------------------------------------+
440
+ | hex(c) |
441
+ +------------------------------------------+
442
+ | E4BB8AE697A5E381AFF09F8DA3E381A8F09F8DBA | ←ちゃんと入ってる
443
+ | E4BB8AE697A5E381AF3F3F3F3FE381A83F3F | ←データが「?」
444
+ +------------------------------------------+
445
+
446
+ = 混ぜるな危険!
447
+
448
+ = 全部 utf8 / utf8mb4 に統一すれば安全
449
+
450
+ = まとめ
451
+
452
+ = 歴史的経緯により日本語には複数の文字コードが使用されている
453
+
454
+ = これからは UTF-8 を使えばみんなハッピー
455
+
456
+ = 本当に?
457
+
458
+ = ((*Unicode の闇*))
459
+
460
+ == prop
461
+
462
+ : background-color
463
+ black
464
+
465
+ = 中国語と日本語で文字が統一
466
+
467
+ # image
468
+ # src = 写真.png
469
+ # relative-height = 80
470
+
471
+ = 合成文字
472
+
473
+ * が (E3 81 8C)
474
+
475
+ * が (E3 81 8B E3 82 99)
476
+
477
+ * 「か」 +「゙ 」の二文字
478
+
479
+ * 比較には正規化が必要
480
+
481
+ = 色付き絵文字の肌色問題
482
+
483
+ * 絵文字は日本発祥
484
+ * 肌色が一種類
485
+ * 「人種差別だ!」
486
+ * 合成文字で解決
487
+
488
+ # image
489
+ # src = color-emoji.png
490
+ # relative-width = 80
491
+
492
+ (('note:これからの絵文字の実装指針、UTR #51“Unicode Emoji”とはなにか -INTERNET Watch http://internet.watch.impress.co.jp/docs/special/20150131_686161.html'))
493
+
494
+ = 俺達の戦いはこれからだ!
495
+
496
+ = おわり
Binary file
data/pepper.png ADDED
Binary file
Binary file
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-tommy-mojibake
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - "とみたまさひろ"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ description: "文字化けについて"
28
+ email:
29
+ - tommy@tmtm.org
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rabbit"
35
+ - MyBooks.jpg
36
+ - README.rd
37
+ - Rakefile
38
+ - color-emoji.png
39
+ - config.yaml
40
+ - icon.jpg
41
+ - lavie.png
42
+ - mojibake.png
43
+ - mojibake.rab
44
+ - pdf/mojibake-mojibake.pdf
45
+ - pepper.png
46
+ - "サンチーム.png"
47
+ - "メールアドレス正規表現.png"
48
+ - "写真.png"
49
+ - "文字化け.pdf"
50
+ homepage: http://slide.rabbit-shocker.org/authors/tommy/mojibake/
51
+ licenses: []
52
+ metadata: {}
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 2.4.5
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: "文字化け"
73
+ test_files: []