36116


文字コードの変換で、`string.charCodeAt(n)`がありますが、文章ごと変換することは、できないのでしょうか？

むりやり、

[code]

    var str1 = str.charCodeAt(0);
    var str2 = str.charCodeAt(1);
    document.form.value = str1 + ',' + str2;
    
[/code]

と2文字しか変換できません。100文字近くの文章の文字すべてをJavaScriptで変換してTextArea内に表示させたいです。

お分かりの方、いらっしゃいますでしょうか、よろしくお願いします。

**例:**

"ABC": `97,98,99`

"": `55399,55399,55399,55399,55399`


CC BY-SA 3.0
2017-07-03T14:11:53.817
36074
2017-07-05T14:55:11.540
2017-07-05T14:55:11.540
3068
24195
question
javascript 文字コード
string.charCodeAt(n)で、文章変換は、できない？


質問者様にサロゲートペアの知識がないもの&大文字小文字誤記と判断して回答したします。  
やりたいことは「入力された文字列をUTF-16のコードポイントに変換する」として  
期待値は

[code]

    a => 97
    A => 65
    あ => 12354(0x3042)
     => 55399,56893(0xD8670x‌​DE3D)
    (がなぜ2文字になるのかは後述)
    
[/code]

ただし、そもそも質問者様の記載している期待値の設定が誤っている可能性がありますので後述する文章をお読みいただきたく思います。

コードとしては以下の様にループで回すだけです。(一発で変換できるAPIありましたら他回答者様フォロー願います)

[code]

    function decodeString(){
      var src = document.getElementById('src').value;
      var dest = '';
      for(i=0; i < src.length; i++) {
        dest += src.charCodeAt(i) + ',';
      }
      document.getElementById('dest').value = dest;
    }
[/code]

[code]

    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body onload="decodeString()">
    <textarea id="src" onchange="decodeString()">あaA</textarea>
    <textarea id="dest"></textarea>
    </body>
    </html>
[/code]

※質問本題とはそれますが、「文字コード」について記載します。

「文字コード」という言葉は  
「文字集合(UnicodeやJISxxxx等 サポートする文字の種類を番号付けしたもの)」  
と  
「符号化方式/エンコード方式(UTF-16やShift_JIS等 文字集合をプログラムで扱うために符号化したもの)」  
と人によって混同して使っていることがあります。  
(私見では)文字コードというとエンコード方式を指すことが多いと思います。

踏まえまして、回答者様方が質問が曖昧であるとご指摘されているのは  
「shift_jisをutf-8に変換みたいなことをやりたいのか？」(恐らく一般的には「文字コード変換」というとこれを想起するかと思います)  
また「文字コードを表示」と言っても  
「ページのエンコードにしたがってバイト文字列を表示」したいのか(Shift_JISならShift_JISのコード)、  
「特定のエンコード方式のコードポイントを表示したい」のか(charCodeAt()はUTF-16のコードを返します。(というかjsの内部コード))  
あるいは文字集合のコードポイントを出したいのか  
のあたりで回答者様方は回答に困られたのかと思います。  
質問者様の記載された例は「UTF-16のコードポイントを表示」となっておりますが、それが期待値でよいのかご確認いただきたく思います。

さらに文字集合と符号化方式を混同することが多いのはUTF-16のコードポイントとUnicodeのコードポイントは「大体同じ」である点にあります。  
「あ」はUnicodeコードポイントもUTF-16のコードポイントも0x3042です。

UTF-16は「2byteでも他の文字と被りがなく使える範囲の文字」に関してはUnicodeそのままのコードポイントを使いますが  
「2byteで表現しようとしてしまうと他の文字と被ってしまう部分」はサロゲートペアという手法を使いエンコードされます。

「」はその「2byteで表現しようとしてしまうと他の文字と被ってしまう部分」で  
Unicodeで定義される171581番目(0x29E3D)の文字です。  
そのまま表現してしまおうとすると0x0002と0x9e3dという文字と被ってしまいますよね。  
そこで代用符号位置という特殊ポイントに置き換え0xD8670xDE3Dと4byteコードに符号化されます(サロゲートペア)。


CC BY-SA 3.0
2017-07-05T12:48:32.337
36116
2017-07-05T12:48:32.337
19716
36074
answer


  * `"ABC"`→`"65,66,67"`
  * `""`→`"55399,56893,55399,56893,55399,56893,55399,56893,55399,56893"`

でよければ

[code]

    str.split('').map(function(c){return c.charCodeAt(0)}).join();
    
[/code]

の１行で実現できます。  
小文字に変換する場合は全角文字も変換するかなど条件を明確にする必要があります。


CC BY-SA 3.0
2017-07-05T12:54:51.487
36117
2017-07-05T12:54:51.487
4236
36074
answer