エンコーディング関数
エンコーディング関数は、名前付き文字エンコーディングを使用してテキストとバイトを変換し、メールヘッダーで使用されるencoded-word形式を処理します。
これらの関数は、Shift_JISのメインフレームエクスポート、Windows-1252のレガシーCSV、アクセント付きの名前を含むメールヘッダーなど、システムがUTF-8を扱えない場合に重要です。エンコーディングが間違っていると、éであるべき箇所がéとして表示される文字化けしたテキストが生成されます。
エンコーディングはエスケープではありません
エンコーディングは、どのバイトが文字を表すかに関するものです。エスケープは、形式内でどの文字が安全かに関するものです。 CSVに送信されるアクセント付きの名前にはその両方が必要であり、一方が他方の代わりになることはありません。
機能の提供状況
WELは現在、一部のお客様にご利用いただけます。ご利用のワークスペースで利用可能かどうかを確認するには、Customer Success Representativeにお問い合わせください。
テキストからバイトへ、そして元に戻す
次の関数は、指定された文字エンコーディングでテキストとバイトを変換します。
encode_string
名前付きエンコーディングを使用して文字列をBinaryに変換します。
テキストに非ASCII文字が含まれる可能性がある場合は、Binary()ではなくencode_stringを使用します。 Binary()は、エンコーディングを選択する代わりに、非ASCII入力に対してE008を発生させます。
encode_string(text, encoding)| パラメーター | 説明 |
|---|---|
| テキスト | エンコードする文字列。 |
| encoding | UTF-8やShift_JISなどのエンコーディング名。 |
アクセント付き文字列をUTF-8としてエンコードする
次の例では、アクセント付き文字列をUTF-8バイトとしてエンコードします。
Formula
encode_string('café', 'UTF-8')出力
0x"636166C3A9"éは2バイトのC3A9を占めるため、4コードポイントの文字列caféは5バイトにエンコードされます。 lengthはコードポイントを数え、grapheme_lengthはユーザーが認識する文字を数え、byte_lengthはバイトを数えます。 ASCII以外では、この3つが異なる場合があります。
decode_string
名前付きエンコーディングを使用してBinaryを文字列に変換します。
decode_string(binary, encoding, options)| パラメーター | 説明 |
|---|---|
| バイナリ | デコードするバイト。 |
| encoding | バイトで使用されているエンコーディング。 |
| options | 無効なシーケンスの処理方法を制御する任意のマップ。 invalid: 'replace'は置換文字で置き換え、'skip'はそれらを削除します。 |
デフォルトでは、無効なシーケンスによりエラーが発生します。代わりにバイトをサイレントに置き換えると、データの問題が、誰にも気付かれない破損したレコードになります。
UTF-8バイトを文字列に戻す
次の例では、UTF-8バイトを元の文字列に戻します。
Formula
decode_string(encode_string('café', 'UTF-8'), 'UTF-8')出力
cafédecode_string_by_content_type
ユーザーが指定したものではなく、HTTPContent-Typeヘッダーで指定されたcharsetを使用してバイトをデコードします。
制御できないエンコーディングのHTTPレスポンスを処理する場合に使用します。
decode_string_by_content_type(binary, content_type, options)| パラメーター | 説明 |
|---|---|
| バイナリ | デコードするバイト。 |
| content_type | Content-Typeヘッダー値。 |
| options | ヘッダーに指定がない場合に使用するfallbackエンコーディングを指定する任意のマップ。 |
変換前の確認
次の関数は、テキストまたはバイトが指定されたエンコーディングをサポートしているかどうかをテストします。
ascii_string?
文字列にASCII文字のみが含まれている場合はtrueを返します。
ascii_string?(text)| パラメーター | 説明 |
|---|---|
| テキスト | テストする文字列。 |
プレーン文字列はASCIIです
次の例では、プレーンなASCII文字列をテストします。
Formula
ascii_string?('plain')出力
trueアクセント付き文字列はASCIIではありません
次の例では、アクセント付き文字を含む文字列をテストします。
Formula
ascii_string?('café')出力
falseconvertible_to_encoding?
指定されたエンコーディングが、何も失わずに文字列を表現できる場合はtrueを返します。
制限された文字セットを持つシステムにテキストを送信する前に、変換可能性を確認します。文字がサイレントに置き換えられたレコードを配信するよりも、ここでレコードを拒否する方が適切です。
convertible_to_encoding?(text, encoding)| パラメーター | 説明 |
|---|---|
| テキスト | テストする文字列。 |
| encoding | ターゲットエンコーディング。 |
アクセント付き文字列がASCIIに適合するかをテストする
次の例では、アクセント付き文字列を損失なくASCIIに変換できるかどうかをテストします。
Formula
convertible_to_encoding?('café', 'ASCII')出力
falsevalid_string?
バイトが指定されたエンコーディングで有効であり、デコードできる場合はtrueを返します。
valid_string?(binary, encoding)| パラメーター | 説明 |
|---|---|
| バイナリ | テストするバイト。 |
| encoding | テスト対象のエンコーディング。 |
有効なUTF-8バイト
次の例では、有効なUTF-8であるバイトをテストします。
Formula
valid_string?(Binary('AB'), 'UTF-8')出力
trueencodings
サポートされているエンコーディング名を一覧表示します。同義語を含めるにはtrueを渡します。
encodings(include_synonyms)| パラメーター | 説明 |
|---|---|
| include_synonyms | 任意のBoolean。 |
メールヘッダー
メールヘッダーに含められるのはASCIIのみです。 RFC 2047は、その範囲外のものをすべて=?UTF-8?B?...?=のようなencoded-wordでラップします。
encode_mime_header
メールヘッダー用に、テキストをRFC 2047のencoded-wordとしてエンコードします。
encode_mime_header(text, encoding, mode)| パラメーター | 説明 |
|---|---|
| テキスト | エンコードするヘッダーテキスト。 |
| encoding | 使用する文字エンコーディング。 |
| mode | 任意のエンコーディングモード。 |
アクセント付きの名前をヘッダー用にエンコードする
次の例では、アクセント付き文字列をRFC 2047のencoded-wordとしてエンコードします。
Formula
encode_mime_header('café', 'UTF-8')出力
=?UTF-8?B?Y2Fmw6k=?=decode_mime_header
メールヘッダー内のRFC 2047 encoded-wordをテキストに戻します。
decode_mime_header(text)| パラメーター | 説明 |
|---|---|
| テキスト | デコードするヘッダー値。 |
RFC 2047 encoded-wordをデコードする
次の例では、RFC 2047 encoded-wordをテキストに戻します。
Formula
decode_mime_header('=?UTF-8?B?SGVsbG8=?=')出力
Helloユースケース: レガシーASCII専用システム用に名前を準備する
送信先はASCIIのみを受け付けます。送信前にconvertible_to_encoding?を使用して各名前を確認し、破損したテキストを配信するのではなく、適合しないものをルーティングします。
入力
{
"names": ["Kalani Park", "Noam Gupta", "José Álvarez"]
}Formula
let parts = _.names >> partition_by(n ~> convertible_to_encoding?(n, 'ASCII'))
do {
send: parts >> at(0),
needs_review: parts >> at(1)
}出力
{
"send": ["Kalani Park", "Noam Gupta"],
"needs_review": ["José Álvarez"]
}送信前に変換可能性を確認し、Jos? lvarezのような破損したテキストを受け取る代わりに、担当者がレコードを修正できるようにします。
関連情報
最終更新日: