FC2ブログ

Ctrl + Z

人生をUndoしよう

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
01


スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

KONOZAMA ドグマ

いやー、やっと手元にドラゴンズドグマがやってきました(`ε´)

いつもどおりAmazonで予約してたんですが、平日は仕事なので、コンビニ受け取りにしたわけですよ。
出荷が前日なら、発売日当日(24日)の夕方には、コンビニ受け取りができるんだと思うのですが、出荷されたのが、25日0時でした。ちなみに、出荷メールが来たのは朝7時。

25日中にコンビニで、受け取れるかと思ったのですが、いつまでたってもコンビに受け取り認証キーが来ず、結局来たのは、26日の12時20分。

やっぱ、Amazonのコンビニ受け取りは微妙ですね。(ちなみに家は首都圏のはずれ)



会社勤めがあると、どうしても平日に宅配便を受け取れません。でも、コンビニ受け取りだと、コンビニのトラックで店まで届くのか、1日に1,2回しかコンビニに来ないはずなので、すばやさは足りません。
(ローソンのシステムなのか、全体のシステムなのか判りませんが、トラック着とメールが上手くリンクしていない気もします)


そこで、色々考えたのですが、やっぱりヤマト運輸のサービスを上手く使うのがよさそうです。


1.クロネコメンバーズになると、自宅着の荷物を、コンビニや営業所で受け取れる。
2.クロネコメンバーズになると、お届け前や、不在時にeメールで連絡をくれる。

というサービスが有ります。クロネコメンバーズ自体は無料です。
登録して携帯電話にeメールが来るようにすれば、外出先でも、再配達依頼や受け取り先の変更をすることができるようになります。

働いている人には、このサービスは非常にありがたいと思います。
コンビニトラックと違って、クロネコならドライバーが迅速に行動してくれますしね。


問題点があり、ヤマト運輸で配送することを指定できれば良いのですが、Amazonでは指定できません。
しかし、お急ぎ便だと、ヤマト運輸が使われるはずなので、若干金額がプラスになってしまいますが、平日でも確実に受け取りたい場合はアリだと思います。

ただ、Amazonお急ぎ便にも問題があって、未発売の製品の予約では、お急ぎ便指定ができないんですよね。
コレばっかりは、ヤマト運輸で発送されることを祈るしかありません。


どうしても、発売日当日に欲しければ、店で買うのが良さそうですね。
さて、ゲームしよっと。












スポンサーサイト

SyntaxHighlighterの使い方編

前回に引き続き、SyntaxHighlighterに関して取り上げていきます。

前回は、「FC2ブログにSyntaxHighlighterを導入する方法」と題しまして、セットアップまでを行いました。

今日は具体的な使い方を、まとめて行きます。


まずは、基本的な使い方です。

<pre class="brush: python">with open('test.txt', 'r') as fp:
for line in fp: #ファイル読み込み
print(line) #標準出力</pre>

with open('test.txt', 'r') as fp:
for line in fp: #ファイル読み込み
print(line) #標準出力


使い方はさほど難しくありません。
1行目と5行目のように、表示したいプログラムを、<pre class="">~</pre> で囲います。
classの中身は、brush:言語の種類; という書き方をします。


言語の種類ですが、前回、autoloaderの設定で、以下の中から、使いたいものをピックアップして書きました。
ここで書いた、前の部分、例えば、Delphiのプログラムの場合"delphi"または"pascal"と書くことで、その言語が<pre>の中に、書かれていると判別され、それに合わせた表記をしてくれます。

SyntaxHighlighter.autoloader(
'applescript http://ほげほげ/shBrushAppleScript.js',
'actionscript3 as3 http://ほげほげ/shBrushAS3.js',
'bash shell http://ほげほげ/shBrushBash.js',
'coldfusion cf http://ほげほげ/shBrushColdFusion.js',
'cpp c http://ほげほげ/shBrushCpp.js',
'c# c-sharp csharp http://ほげほげ/shBrushCSharp.js',
'css http://ほげほげ/shBrushCss.js',
'delphi pascal http://ほげほげ/shBrushDelphi.js',
'diff patch pas http://ほげほげ/shBrushDiff.js',
'erl erlang http://ほげほげ/shBrushErlang.js',
'groovy http://ほげほげ/shBrushGroovy.js',
'java http://ほげほげ/shBrushJava.js',
'jfx javafx http://ほげほげ/shBrushJavaFX.js',
'js jscript javascript http://ほげほげ/shBrushJScript.js',
'perl pl http://ほげほげ/shBrushPerl.js',
'php http://ほげほげ/shBrushPhp.js',
'text plain http://ほげほげ/shBrushPlain.js',
'py python http://ほげほげ/shBrushPython.js',
'ruby rails ror rb http://ほげほげ/shBrushRuby.js',
'sass scss http://ほげほげ/shBrushSass.js',
'scala http://ほげほげ/shBrushScala.js',
'sql http://ほげほげ/shBrushSql.js',
'vb vbnet http://ほげほげ/shBrushVb.js',
'xml xhtml xslt html http://ほげほげ/shBrushXml.js'
);



では、一度、試しにプログラミングを表示してみてください。
この時点で、表示がうまくいかない場合は、設定、または、アップロードするファイルが間違っている可能性があります。

しつこいようですが、.jsファイルは、必ず、scriptsフォルダにあるファイルを使用してください。srcフォルダにあるファイルは使ってはいけません。

一度間違い、再アップロードした後でも、上手く表示されない場合があります。たぶん、ブラウザのキャッシュに残っているのだと思います。一度キャッシュクリアを試してみてください。


その他、細かい点ですが、


<pre class="brush: python">
with open('test.txt', 'r') as fp:
for line in fp: #ファイル読み込み
print(line) #標準出力</pre>

こうかくと、

with open('test.txt', 'r') as fp:
for line in fp: #ファイル読み込み
print(line) #標準出力

こんな風に書くと、1行多く出てしまいます。preタグから、改行せずに、ソースコードをはじめましょう。(FC2だけなのか、それ以外もなのかは不明)






注意点

ブログにソースコードを載せる場合、問題となるのが、「<」「>」「&」の文字です。不等号や論理演算、ポインタなどで、これらの文字を使用しますが、このまま使ってしまうと、htmlタグとして認識され、正しくページが表示されなくなります。

そのため、
'&' は、'&amp;'
'<' は、'&lt;
'>' は、'&gt;'
に変換する必要があります。

手前味噌ではありますが、Py習 特殊文字置換(HTML用) http://pyshu.blog111.fc2.com/blog-entry-63.htmlにて、変換ツールを公開しています。Python使いで、Windows派な方は、使ってみてください。







SyntaxHighlighterには、いくつかのオプションがあります。よく使うやつを試してみます。


title (プログラムにタイトルをつける)

タイトルをつけるには、
<pre class="brush:html" title="タイトルを書く">
という風に書きます。
<pre class="brush:python;" title="お好きなタイトルをどうぞ">from collections import OrderedDict
txt = "Tom&amp;Jerry"
d = OrderedDict([
('&amp;','&amp;amp;'),('\"', "\'"),
('&lt;','&amp;lt;'), ('&gt;','&amp;gt;')])
for key in d:
txt = txt.replace(key,d[key])</pre>

from collections import OrderedDict
txt = "Tom&Jerry"
d = OrderedDict([
('&','&amp;'),('\"', "\'"),
('<','&lt;'), ('>','&gt;')])
for key in d:
txt = txt.replace(key,d[key])









highlight (指定行の強調)

「brush:言語;」の後に、「highlight:[行番号,行番号,行番号];」と書きます。
<pre class="brush:python; highlight:[3,6]">from collections import OrderedDict
txt = 'Tom&amp;Jerry'
d = OrderedDict([
('&amp;','&amp;amp;'),
('&lt;','&amp;lt;'),
('&gt;','&amp;gt;')])
for key in d:
txt = txt.replace(key,d[key])</pre>

from collections import OrderedDict
txt = 'Tom&Jerry'
d = OrderedDict([
('&','&amp;'),
('<','&lt;'),
('>','&gt;')])
for key in d:
txt = txt.replace(key,d[key])







first-line (開始行の指定)

「brush:言語;」の後に、「first-line:開始行番号;」と書きます。
<pre class="brush:python; first-line:53">from collections import OrderedDict
txt = 'Tom&amp;Jerry'
d = OrderedDict([
('&amp;','&amp;amp;'),
('&lt;','&amp;lt;'),
('&gt;','&amp;gt;')])
for key in d:
txt = txt.replace(key,d[key])</pre>

from collections import OrderedDict
txt = 'Tom&Jerry'
d = OrderedDict([
('&','&amp;'),
('<','&lt;'),
('>','&gt;')])
for key in d:
txt = txt.replace(key,d[key])


highlightオプションと組み合わせる場合は、
<pre class="brush:python; first-line:53 highlight:[55,58]">from collections import OrderedDict
txt = 'Tom&amp;Jerry'
d = OrderedDict([
('&amp;','&amp;amp;'),
('&lt;','&amp;lt;'),
('&gt;','&amp;gt;')])
for key in d:
txt = txt.replace(key,d[key])</pre>

from collections import OrderedDict
txt = 'Tom&Jerry'
d = OrderedDict([
('&','&amp;'),
('<','&lt;'),
('>','&gt;')])
for key in d:
txt = txt.replace(key,d[key])









gutter (行番号のON,OFF)

「brush:言語;」の後に、「gutter:true or false;」と書きます。
gutterオプションをつけない場合はtrueとなり、「gutter:false」で行番号がOFFになります。
<pre class="brush:python; gutter:false;">from collections import OrderedDict
txt = "Tom&amp;Jerry"
d = OrderedDict([
('&amp;','&amp;amp;'),
('&lt;','&amp;lt;'),
('&gt;','&amp;gt;')])
for key in d:
txt = txt.replace(key,d[key])</pre>

from collections import OrderedDict
txt = "Tom&Jerry"
d = OrderedDict([
('&','&amp;'),
('<','&lt;'),
('>','&gt;')])
for key in d:
txt = txt.replace(key,d[key])









collapse (プログラムを折りたたんだ状態にする)

「brush:言語;」の後に、「collapse:true or false;」と書きます。
collapseオプションをつけない場合はfalseとなり、「collapse:true」で折りたたんだ状態になります。
<pre class="brush:python; collapse:true;">from collections import OrderedDict
txt = "Tom&amp;Jerry"
d = OrderedDict([
('&amp;','&amp;amp;'),('\"', "\'"),
('&lt;','&amp;lt;'), ('&gt;','&amp;gt;')])
for key in d:
txt = txt.replace(key,d[key])</pre>

from collections import OrderedDict
txt = "Tom&Jerry"
d = OrderedDict([
('&','&amp;'),('\"', "\'"),
('<','&lt;'), ('>','&gt;')])
for key in d:
txt = txt.replace(key,d[key])










toolbar (右上の[?]を消す)

「brush:言語;」の後に、「toolbar:true or false;」と書きます。
toolbarオプションをつけない場合はtrueとなり、「toolbar:false」で右上の[?]が消えます。
<pre class="brush:python; toolbar:false;">from collections import OrderedDict
txt = "Tom&amp;Jerry"
d = OrderedDict([
('&amp;','&amp;amp;'),('\"', "\'"),
('&lt;','&amp;lt;'), ('&gt;','&amp;gt;')])
for key in d:
txt = txt.replace(key,d[key])</pre>

from collections import OrderedDict
txt = "Tom&Jerry"
d = OrderedDict([
('&','&amp;'),('\"', "\'"),
('<','&lt;'), ('>','&gt;')])
for key in d:
txt = txt.replace(key,d[key])








その他、テストは省略
auto-links : デフォルトtrue : プログラム中のURLをリンクにする。
class-name : CSSの独自のクラスを指定。ココのサイトが詳しい。
html-script : デフォルトtrue : html/XMLとスクリプトが混ざっても、ハイライト。ただし、使用できるBrushが限られている。
smart-tabs : デフォルトtrue : 賢いらしい。
tab-size : デフォルト4 : タブのサイズを変更する。



以上。快適なブログライフを。














FC2ブログにSyntaxHighlighterを導入する方法

ブログにソースコードを綺麗に表示するために、SyntaxHighlighterを組み入れたいと思います。

SyntaxHighlighterを使うと、こんな感じに表示されます。


def main():
#ファイルオープン
with open('test.txt', 'w') as fp: #fpにファイルオブジェクトが入る
fp.write('hello world\n') #ファイルに書き込み
fp.write('hello python') #ファイルに書き込み
with open('test.txt', 'r') as fp:
for line in fp: #ファイル読み込み
print(line)

if __name__ == '__main__':
main() 




実は、Py習(http://pyshu.blog111.fc2.com/)というPython勉強サイトを運営しており、ここにもSyntaxHighlighterを導入しており2回目なのですが、予定通り、ハマッったので備忘録も兼ねて、情報を残しておきたいと思います。

ココで使用するのは、SyntaxHighlighter ver.3系のセットアップ方法です。ver.2系では使用できない方法もありますのでご注意ください。


(0) 導入の流れ

SyntaxHighlighterは、JavaScriptとCSSファイルから成り立っています。
ファイルは無料で使用可能です。(寄付受付有り。LGPL, MITライセンス)

① SyntaxHighlighterのダウンロードする
② 使用ファイルの確認とカスタマイズ
③ ファイルをアップロードする
④ テンプレートを書き換える

の順序で作業を行います。







(1) SyntaxHighlighterのダウンロード

SyntaxHighlighterは、
http://alexgorbatchev.com/SyntaxHighlighter/download/
からダウンロードすることができます。現在の最新バージョンは、ver.3.0.83です。






zipファイルがダウンロードされますので展開をします。










(2) 使用ファイルの確認とカスタマイズ

使用するファイルを確認します。
SyntaxHighlighterは、大きく分けて3つの部品群があります。


(i) CSSファイル

デザインを決めるのがCSSファイルです。CSSファイルは、Sytlesフォルダに入っています。
この中には、shCore.css と shCoreXXXX.css と shThemeXXXX.css という名前のものが入っています。
これは、
  shCoreXXXX.css = shCore.css + shThemaXXXX.css
という具合に、なっています。
そのため、
  shCoreXXXX.css をアップロードして使うか、
  shCore.css と shThemeXXXX.css の二つをアップロードして使うかを
を選べます。
お好きなほうを選んでいいのですが、ココでは説明しやすいように、shCoreXXXX.cssのほうを使用します。


各テーマのデザイン一覧です。



このまま使用しても良いですし、自分でカスタマイズしても構いません。カスタマイズする場合は、基本となる1種類を決めて、それをベースに改造するのが良いかと思います。



(ii) 共通のJavaScriptファイル

scriptsフォルダの中に、.jsファイルが沢山あります。shBrush~から始まるファイルと、それ以外のファイルがあるのがわかります。

必ず使用するのが、
  shCore.js
  shAutoloder.js
  shLegacy.js (これの使い方はようわからん・・・)
です。
必ず、scriptsフォルダにあるファイルを使用してください。srcフォルダにあるファイルは使ってはいけません(XregExpが定義されていない、というエラーが出て、正しく表示されません)。


(iii) 開発言語のBrushファイル

shBrushPython.jsなど、shBrush~から始まるファイルたちです。
表示したい開発言語のBrushファイルをいくつか選択してアップロードします。



(iv) ファイルのアップロード前に、先にCSSファイルのカスタマイズを行ってしまいます。

修正するのは、shCoreXXXXXX.cssファイルです。(shCoreDefault.cssなど)。

まず1つ目が、IE、Chromeで常に縦スクロールバーが表示されてしまう問題を解消する方法です。(ネタ元
下のソースのように、61行目を追加してください。


.syntaxhighlighter {
width: 100% !important;
margin: 1em 0 1em 0 !important;
position: relative !important;
overflow: auto !important;
font-size: 1em !important;
overflow-y: hidden !important;
}



次に、IEで最後の1行が表示されない問題を解消する方法です。(ネタ元
下のソースのように、75行目を追加してください。


.syntaxhighlighter table {
width: 100% !important;
margin-bottom: 1em !important;
}



つづいて、色変えたい場合ですが、230行目あたりから、好きなように変更します。
特に、偶数ライン、奇数ラインで色を変えたい場合は、.line.alt1, .line.alt2のbackground-colorの値を変えます。alt1が偶数ライン、alt2が奇数ラインです。


.syntaxhighlighter .line.alt1 {
background-color: #121212 !important;
}
.syntaxhighlighter .line.alt2 {
background-color: #121212 !important;
}








(3) ファイルのアップロード

ファイルをアップロードします。
アップロードしなければならないファイルは、上にも書いたとおり、
  shCoreXXXXX.css
  shCore.js
  shAutoloder.js
  shLegacy.js
  shBrushXXXX.js (表示したい言語全て)
です。

何度も言いますが、.jsファイルは、必ず、scriptsフォルダにあるファイルを使用してください。srcフォルダにあるファイルは使ってはいけません


FC2ブログでの、ファイルのアップロードは、

12_upload.png

をクリックして行います。

12_upload2.png

複数のファイルを一気にアップロードできます。
アップロードを行ったら、赤文字の部分は、メモ帳にでも控えておいてください。
後で使います。

12_upload3.png







(4) テンプレートを書き換える

最後にやることは、ブログのテンプレートを書き換え、スクリプトが読み込まれるようにします。

メニューから、「テンプレートの設定」をクリックします。
12_upload4.png


表示された、テンプレートの設定画面の、「XXXXXXX のHTML編集」という中に、追加を行って行きます。

09_template更新s



まずは、<head>~</head>の中に、.cssと.jsをロードするように、コードを追加します。
</head>の直前に入れてください。
「ほげほげ」部分は、先ほどアップロードしたファイルのパスを、正しく入力してください。


<!-- SyntaxHighlighter Header -->
<link type='text/css' rel='stylesheet' href='http://ほげほげ/shCoreFadeToGrey.css' />
<script type='text/javascript' src='http://ほげほげ/shCore.js'></script>
<script type='text/javascript' src='http://ほげほげ/shLegacy.js'></script>
<script type='text/javascript' src='http://ほげほげ/shAutoloader.js'></script>
<script type='text/javascript' src='http://ほげほげ/shBrushXml.js'></script>
<!-- SyntaxHighlighter Header end -->


ココに記述するのは、Brush以外のファイル全てです。
(shBrushXML.jsはココに書くことで、html-scriptオプションが使えるようになるらしい)


次に、<body> の中に記述を行います。
記述する場所は、「本文」が表示された後の場所に行ってください。よくわからない方は、</body>の直前にでも書いてください。


<!-- SyntaxHighlighter -->
<script type='text/javascript'>
SyntaxHighlighter.autoloader(
'css http://ほげほげ/shBrushCss.js'
,'html xml xhtml http://ほげほげ/shBrushXml.js'
,'py python http://ほげほげ/shBrushPython.js'
,'c-sharp csharp http://ほげほげ/shBrushCSharp.js'
,'cpp c http://ほげほげ/shBrushCpp.js'
);
SyntaxHighlighter.config.bloggerMode=true;
SyntaxHighlighter.all();
</script>
<!-- SyntaxHighlighter end -->



Autoloaderを使用した際の記述となります。Brushをheadで読み込まず、ブログでsyntaxhighliterを使用したときに、必要なスクリプトファイルを読み込むようになります。
先ほどと同様、「ほげほげ」部分は、アップロードしたファイルのパスを、正しく入力してください。


autoloader部分(全プログラム)

SyntaxHighlighter.autoloader(
'applescript http://ほげほげ/shBrushAppleScript.js',
'actionscript3 as3 http://ほげほげ/shBrushAS3.js',
'bash shell http://ほげほげ/shBrushBash.js',
'coldfusion cf http://ほげほげ/shBrushColdFusion.js',
'cpp c http://ほげほげ/shBrushCpp.js',
'c# c-sharp csharp http://ほげほげ/shBrushCSharp.js',
'css http://ほげほげ/shBrushCss.js',
'delphi pascal http://ほげほげ/shBrushDelphi.js',
'diff patch pas http://ほげほげ/shBrushDiff.js',
'erl erlang http://ほげほげ/shBrushErlang.js',
'groovy http://ほげほげ/shBrushGroovy.js',
'java http://ほげほげ/shBrushJava.js',
'jfx javafx http://ほげほげ/shBrushJavaFX.js',
'js jscript javascript http://ほげほげ/shBrushJScript.js',
'perl pl http://ほげほげ/shBrushPerl.js',
'php http://ほげほげ/shBrushPhp.js',
'text plain http://ほげほげ/shBrushPlain.js',
'py python http://ほげほげ/shBrushPython.js',
'ruby rails ror rb http://ほげほげ/shBrushRuby.js',
'sass scss http://ほげほげ/shBrushSass.js',
'scala http://ほげほげ/shBrushScala.js',
'sql http://ほげほげ/shBrushSql.js',
'vb vbnet http://ほげほげ/shBrushVb.js',
'xml xhtml xslt html http://ほげほげ/shBrushXml.js'
);




SyntaxHighlighter.config.bloggerMode=true;
の部分ですが、ブログは記事を書くと自動で改行が入ってしまうのですが、それでも綺麗に表示するためのコンフィグです。デフォルトはfalseなので、必ずtrueにしておきましょう。

その他、コンフィグは、本家のhttp://alexgorbatchev.com/SyntaxHighlighter/manual/configuration/を見てください。
(他のBlogでは、stripBrs設定が必要かも)


これで、設定は終わったので右下の「更新」ボタンを押して、テンプレートを更新します。
最後に、問題が無いか確認してみてください。




次回は、「SyntaxHighlighterの使い方編」を行います。












お好み焼き ウマーヾ(・o・*)シ

今日のお昼ご飯は、お好み焼きでした。




定番の、豚イカ玉は当然の如く旨く、我が家で人気の「トマト納豆」もメチャ美味しかったです。
以外と合うんですよ。

トマト納豆お好み焼きの作り方は、非常に簡単。
トマトは、サイコロ状にカットし、納豆はタレを入れてかき混ぜたものを、混ぜ込んで焼くだけです。
1枚で、トマト半玉と、納豆は1パックぐらいが最適かな。トマトの水分が出て、若干、柔らかく出来上がるんで、ひっくり返すのがちょっと難しいのが難点です。


昼からビールを飲んで、腹いっぱいになったら、眠くなったのでお昼寝をして、最高でした。
太ること間違いないですけどね(ケンコウシンダン ガ チカイノニ・・・・)













UnicodeとUTF-16&UTF-8 (2)

前回に引き続き、Unicodeに関するまとめ2回目です。



前回、Unicodeは、21bitの文字コードということが判りました。そこで、そのコードをそのままメモリに格納するとしたら、32bit変数か、24bitの変数に入れなければなりません。

でもでも、1文字4byteになってしまったら、今までascii(7bit)のデータで済んでいた、英語圏の人たちからしてみたら、データ量が4倍になってしまいます。
もともと、Unicodeが16bitに収まるだろう、ということで考えられており、1文字2byteで済むのであれば、まあ問題ないだろうという判断ができるはずです。

というわけで、Unicodeのデータを、何らかの方式で符号化(エンコード)しようと考え、UTF-16やUTF-8という符号化ができました。



UTF-16


UTF-16は、16bit (2byte)が最小単位となり、最大16bit×2の32bitで文字が表されます。
Unicodeは基本多言語面(BMP)の16bitで、大体の文字が使用できるので、通常は、良くつかわれる16bitだけで済ませ、たまにしか使われない文字は32bitで表せばいいよね、という考えのもと、符号化されます。

正確には、BMPのU+0000~U+D7FFとU+E000~U+FFFFの範囲は、そのまま2byteとなり、それ以外は、4byteになります。

4byteであらわされる場合、サロゲートペアという仕様があり、前半0xD800~0xDBFF, 後半0xDC00~0xDFFFを対にして、一文字を表すことになっています。

UTF-16の利点
・16bitの場合、UnicodeのBMPと互換がある
・ほとんどの文字は16bitで収まるため、サロゲートペアさえなければ、任意の位置が何文字目かを簡単に判別できる。
UTF-16の欠点
・エンディアンによって、バイト列が異なる。(エンディアンとは、バイトオーダーの事で、多バイトのデータを格納する際、バイトデータを上から入れるか、下から入れるかの違い。Windows+Intel CPUでは、リトルエンディアン)。エンディアンを判別するため、先頭にBOMを入れる必要がある。
・asciiの言語圏では、データサイズが倍になる。


サロゲートペアの文字を使う機会は少なく、また、フォントの対応等も必要で、サロゲートペアに対応していないアプリケーションもあったりするため、通常は16bitのみの文字列として考えて、差し支えありません。
そのため、文字数カウントも容易です。

一番大きな欠点は、エンディアンの問題で。エンディアンは使用するCPUで決まり、Intelの場合、リトルエンディアンとなります。メインフレームやJAVA仮想マシンではビッグエンディアンとなっており、エンディアンが異なるとバイトオーダーが入れ替わってしまうため、通信等で文字データをやり取りした際、異なった文字として認識され、文字化けの原因となってしまいます。
そこで、BOM(Byte Order Mark)を先頭につけ、リトルエンディアンか、ビッグエンディアンかの判定ができるような仕様が盛り込まれています。

BOMの仕様では
- BOMが付いていた場合、その値で、リトルエンディアンかビッグエンディアンかを判別
- BOMが付いていなかった場合、ビッグエンディアンとなる。
ただし、Windows上のUnicode文書では、BOMが無い場合、UTF-16LE(リトルエンディアン)とみなされます。
そのため、色々厄介な状態になっています。




UTF-8


UTF-8は、8bit(1byte)が最小単位となり、16bit(2byte), 24bit(3byte), 32bit(4byte)と文字によって、byte数が変わってきます。

AsciiとUTF-8の8bitのみの時が、イコールであるため、英語圏の文字は、そのままUTF-8にすることが出来ます。
2byteとなる場合は、第1バイトの頭3bitが、110から始まり、第2バイトは10から始まります。
3byteとなる場合は、第1バイトの頭4bitが、1110から始まり、第2、第3バイトは、10から始まります。
4byteとなる場合は、第1バイトの頭4bitが、1111から始まり、第2、第3、第4バイトは、10から始まります。


UTF-8の利点
・asciiは、1byteで済む。データの変換も必要なし。
・エンディアンの制約を受けない
UTF-8の欠点
・任意のbyte位置が、何文字目かを判断するためには、先頭から数えて行く必要がある。
・言語によっては、1文字3byte以上必要。(日本語は全て3バイト以上になる)


Asciiは、そのまま1byteで表されるため、データ量は非常にコンパクトになります。例えば、HTMLやXML、JavaScriptやCSSなどは、アルファベットで書かれた部分が比較的多く占め、それらの文字が1byteで済めば、通信の際のデータ量も少なくて済みます。

そのかわり、日本語のような言語では、1文字表すために3byte以上必要となってしまいました。
まあ、仕方ない気はします。(単純に字数だけで、日本語と英語を比べたら、英語のほうが多くなってしまいますし・・・)

また、UTF-16であった、エンディアンの問題は、8bit単位のUTF-8場合発生しません。

欠点は、文字数取得や、任意の位置が何文字目かを判別するためには、先頭からカウントしていかなければならない点です。符号化した状態で、文字列処理をするのは大変だと思います。




実際のところ、プログラミングを行ううえで、UTF-16やUTF-8など、あまり気にしない場合のほうが多いかと思います。最近の言語は、文字列型というのがあり、データは隠蔽されているため、生データに触れる機会は少なく、外部への入出力の際にのみ気をつければ、大体問題なく使えてしまうはずです。

何はともあれ、日々何気に使用しているものであっても、ちゃんと調べてみると、色々な事がわかって面白いですね。


参考サイト
http://ja.wikipedia.org/wiki/Unicode
http://ja.wikipedia.org/wiki/UTF-16
http://ja.wikipedia.org/wiki/UTF-8
http://ja.wikipedia.org/wiki/CJK%E7%B5%B1%E5%90%88%E6%BC%A2%E5%AD%97
http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3
http://www5d.biglobe.ne.jp/~noocyte/Programming/CharCode.html
http://www.kanzaki.com/docs/jcode.html
http://diveintopython3-ja.rdy.jp/strings.html



間違い等、ありましたら、ごめんなさい。
















プロフィール

Green

Author:Green
思ったこと、興味があることなどを適当に。
プログラミングとゲームの話が多いかも。

主に使ってるプログラミング言語
・C++
・C#
・Visual Basic
・Python

email address

最新コメント
最新トラックバック
月別アーカイブ
 
 
 
 
 
リンク (ゲーム)
 
 
Amazon
ゲーム

[2012/05/24] ドラゴンズドグマ(数量限定特典『バイオハザード6』体験版用DLコード同梱)  
  [2012/07/05] 世界樹の迷宮IV 伝承の巨神 (特典 ブックレット付きサウンドトラックCD付き)  
  [2012/07/19] ルーンファクトリー4 (特典 こっそり聴きたい添い寝CD(特製ヘッドフォン付き)付き)  
  [2012/08/02] ドラゴンクエストX 目覚めし五つの種族 オンライン(通常版)
[2012/08/02] ドラゴンクエストX 目覚めし五つの種族 オンライン (Wii USBメモリー16GB同梱版)  
  [2012/08/30] 初音ミク -Project DIVA- f(予約特典:デザイン保護フィルム(PlayStation(R)Vita専用)付き)  
 



DVD / Blu-ray

[2012/07/18] 映画けいおん! (Blu-ray 初回限定版)

[2012/08/29] [初音ミク]ミクの日大感謝祭 2DaysコンプリートBOX(初回受注生産限定盤) [Blu-ray]
 
 
Amazon
 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。