• 締切済み

UTF-8とUTF-16およびUTF-32について

Unicodeにおける各文字エンコーディングについてですが なぜ、UTF-16およびUTF-32の文字コードがビッグエンディアンとリトル・エンディアンの二通りの組み合わせを許容できてUTF-8が許容できないのかがわかりませんなぜでしょうか?

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

UTF-8は8bit単位で処理するように作られていて、エンディアンのような順番を考慮する必要が無いから ではダメですか? 逆に、 ・なぜ、UTF-16等にはエンディアンが必要なのか ・UTF-8のビッグエンディアン/リトルエンディアンって何の順番を変えるのか ということも考えてみては?

1000vicki
質問者

補足

>なぜ、UTF-16等にはエンディアンが必要なのか わかりません。 それを聞いています。 >UTF-8のビッグエンディアン/リトルエンディアンって何の順番を変えるのか >ということも考えてみては? これは、仮に3byteの文字・・たとえば「あ」を 符号化した場合「E3 81 82」 となって入れ替えが前後の入れ替えが2通り以上存在するからということいいたいのですか? E3 81 82 E3 82 81 81 E3 82 81 82 E3 82 81 E3 82 E3 81 と6通りの入れかえが考えられますね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • UTF-8とUTF-16について質問です。

    まず、【あ】という文字をUTF-16というエンコーディング方式で バイト配列化すると [0] => 66 [1] => 48 というバイト値が帰ってきます。 これはとりあえずC#で処理を行いました。 Encoding encode = Encoding.GetEncoding("UTF-16"); String value = "あ"; Byte [] byteData = encode.GetBytes(value); それでは【あ】という文字の文字集合のコードポイントは右記となります。【0x3042】 これは、出力された 66、48という数値を16進数に変換すると 66=>42 48=>30 となり、リトルエンディアン環境で 0x4230という16進数であらわされるようです。 この点も不思議なのですが今回知りたいのはUTF-16でエンコーディングされた バイト配列はこのように文字集合のコードポイントに復帰?させることができますよね? ではUTF-8でエンコーディングされた【あ】という文字の バイト配列 [0] => 227 [1] => 129 [2] => 130 というバイト配列を上記のような文字集合のコードポイントの値へ復帰させることは できるのでしょうか? それに伴いUTF-8でつかわれる文字集合もUTF-16と同じコードポイントなのでしょうか? 上記 1.UTF-8でエンコーディングされた文字列をバイト配列にした場合 元の文字集合に戻せるのか?戻せるならばその戻し方は? 2.UTF-8がさす文字集合とUTF-16がさす文字集合はおなじものですよね? 上記二点よろしくご教授ください。

  • メモ帳で保存した日本語テキストや日本語XMLをJavaで読込、保存。メモ帳での保存文字コードはなにが推奨されるでしょうか?

     Windows9x系ではないWindowsVistaやXP、NT、2000のメモ帳(Unicodeのbig endianは保存できるがおそらくUnicodeのbig endianでのBOMなし保存不可。UTF-8は保存できるがUTF-8でのBOMなし(UTF-8N)の保存不可。Unicodeのlittle endianは保存できるが仕様なので言うまでもないがUnicodeのlittle endianでのBOMなし保存不可。)で保存した日本語テキストや日本語XMLをJavaで読込、保存。メモ帳での保存文字コードはなにが推奨されるでしょうか? やはりJavaのString型に近いUnicode big endianがよいのでしょうか? それともJava側で自動認識してくれるのでしょうか? XMLの場合は1行目でそのXMLファイルが使用している文字コードが何か宣言しますよね。 でもテキストファイルだと文字コードを宣言する場所がないみたいですし・・・(ここでの文字コードを宣言する場所としてはBOMは例外ですよ 念のため) 補足:メモ帳だとUnicode big endianで保存すると必ずBOMが付くみたいです。 メモ帳はLF改行が使えません。CR+LF改行のみ対応です。

    • ベストアンサー
    • Java
  • UTF-16からUTF-8への変換

    こんにちは。 UTF-16からUFT-8への変換で困っています。 CSVファイルの中にbase64でエンコードされたデータがあり、その中にUTF-16(リトルエンディアン)のデータが埋め込まれています。 base64のデータのデコードは、MIME::Base64のdecode_base64で出来ました。 この中から、文字列を取り出して、uft-8に変換したいのですが、なにかうまい方法はないものでしょうか?

    • ベストアンサー
    • Perl
  • UTF7について

    UTF7についてですがマッピングルールなどについて教えていただけないですか? 試しに「あああ」という文字をフリーのソフトでUTF7に変換したところ 2B 4D 45 49 77 51 6A 42 43 という感じでした。2進数でみてもまったく規則性がわかりません。 UNICODE→UTF8はわかるのですが、UNICODE→UTF7に変換するには どうすればいいのでしょうか?

  • encoding="UTF-16" ってUTF-16で書かれても。

     以前からずっと疑問だったのですが。。。  XML宣言の中に、エンコーディングを記述するところがありますが、その宣言文字列自体をそのエンコーディングで記述するというのはおかしくないでしょうか。  たとえば、UTF-16だったら、 encoding="UTF-16" と書くわけですが、これ自体がUTF-16で書かれているわけですよね? UTF-16で書かれているとわかっていたら宣言する必要はないし、宣言読まないとわからないんだったら、この宣言自体も読めないはずです。  今実際に、UTF-16で書かれていて、エンコーディング宣言もしているXML文書をあるソフトで読もうとしているのですが、1バイト目を読んだところで「Unexpected character. position = 0 」と出力されてエラーになります。  強制的にUTF-16で読ませる昨日もあるので、そうすればエラーは起こりませんが、それじゃエンコーディング宣言の存在自体に意味がないのでは? これは、最初の時点で読めないこと自体がこのソフトの不具合なのでしょうか?  これってどういうことなんでしょう。解決できるんでしょうか。

    • ベストアンサー
    • XML
  • 文字コード結果が違うのはなぜでしょうか?

    文字コード結果が違うのはなぜでしょうか? いつも参考にさせていただいております。ありがとうございます。 VBAにて、文字コード(16進表記)を取得したいのですが、 1.hex(ascw("あ")) 2.Dim ByteData() As Byte  ByteData = "あ" Debug.Print Hex(ByteData(0)) & Hex(ByteData(1)) の2通り行っているのですが、結果が違いました。 1.3042 2.4230 となってしまいます。 UNICODEのリトルエンディアン・ビックエンディアンの違いなのかとも思いましたが、 上記はどちらもVBAで行っているため、式によって扱いが違うとも考えられません。 この違いはなぜなのでしょうか? ご教授よろしくお願いいたします。

  • UTF-8とASCIIコードにおける互換性について

    UTF-8とASCIIはそのASCIIコードの範囲のおいて 互換性を持ちます。(と、書籍や多種な文献にはそういった記述があります) たとえば【A】という文字をUTF-8で符号化した際は【41】(16進数で) さらにASCIIコードでも【41】という値がAという文字に割り当てられています。 確かに、一件互換しているようにみえますが、UTF-8っていうことは最終的には Unicode上のコードポイントの値・・・つまり0x0041という値に復元?(というのでしょうか)するわけですよね? でそのUnicodeの文字集合上から復元したコードポイントに対応する文字を参照しAという文字をみつけてくると・・・。 これって【A】という文字をUTF-8で符号化した歳のバイト列はASCIIと一致しているけれど 結局Unicodeコードポイントに直した場合【00】という上位バイトが無駄にくっついてきて【0x0041】となり 互換性がなくなるのではとおもったのですが・・・。 これはどういう意味の互換性なのでしょうか? 識者の方ご教授ください。 お願い致します。

  • UTF-8にマップできません???

    今、Atomを愛用しております。 チャンと日本語変換できているのに 後半のようなエラーが出るのはなぜでしょうか??? import java.applet.*; // Applet import java.awt.*; // Label, TextField, TextArea, Color, Button import java.awt.event.*; // ActionListener, ActionEvent import java.io.*; // InputStream, BufferedReader, InputStreamReader etc import java.net.*; // URL, Socket, UnknownHostException import java.util.*; // StringTokenizer //public class Chat extends Applet implements Runnable, ActionListener { // Runnable, ActionListenerインターフェース実装 Label TitleLabel; // タイトルラベル TextField InputField; // 入力フィールド Button SendButton; // 送信ボタン Button QuitButton; // 終了ボタン TextArea DisplayArea; // 表示エリア TextArea MemberArea; // メンバーエリア Thread thread; // スレッド Socket socket; // ソケット String Name = null; // 名前 //AudioClip Chime; // チャイム BufferedReader NetInput; // ネットワーク経由入力 PrintStream NetOutput; // ネットワーク経由出力 C:\JAVA>javac Chat.java Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x93)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x81)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x81)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x8E)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0xC0)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x91)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:9: エラー: この文字(0x95)は、エンコーディングUTF-8にマップできません // Runnable, ActionListener?C???^?[?t?F?[?X???? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x8B)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x89)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^ Chat.java:11: エラー: この文字(0x83)は、エンコーディングUTF-8にマップできません Label TitleLabel; // ?^?C?g?????x?? ^

    • ベストアンサー
    • Java
  • UTF8からUnicode(コードポイント)へ変換

    UTF-8の文字コードをUnicode(コードポイント)へ変換させたいのですが、参考URLの情報のように計算式を知りたいです 。 例えば下の「あ」は、16進では「E38182」、10進では「14909826」ですが、どちらかの値を利用してUnicodeのポイントコード「12354」を計算式を用いて求めたいです。 「あ」 Unicode = 12354 16進 = E38182 10進 = 14909826 参考 http://questionbox.jp.msn.com/qa500194.html

  • 保存形式としてのUnicode、UTF-8

    「Unicode、UTF-8 違い」などでネットを検索すると Unicode・・・文字コード UTF-8・・・符号化方式 とのことで、同次元のものではないとのこと。 しかし、 さくらエディタ、TeraPadなどのテキストエディタの保存形式に Unicode、UTF-8などがあるのですが、この違いは何でしょうか? 前提として、iPhone/iPadにてテキストファイルを扱おうとすると Gmailの添付ファイル、Dropboxなどで文字化けする(デコードできない)ので どちらかの形式に統一しようと思ったのですが、 あとあと困るといやなので、正確に理解したいと思った次第です。 どうぞよろしくお願いします。