UTF-8 は、8 番目のビットを利用して非 ASCII (7 ビット コード) に複数のバイトを使用するエンコーディングです。そのため、マルチバイト シーケンス内では ,'\'
は見つかりません。'/'
そしてisdigit
動作します(アラビア語やその他の数字ではありません)。
これは ASCII のスーパーセットであり、すべての Unicode 文字を保持できるため、確実に char および string で使用できます。
HTTP ヘッダーを調べます (大文字と小文字は区別されません)。それらは ISO-8859-1 にあり、空の行と HTML コンテンツの前にあります。
Content-Type: text/html; charset=UTF-8
存在しない場合は、存在する可能性もあります
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="UTF-8"> <!-- HTML5 -->
ISO-8859-1 は Latin 1 であり、コンマ引用符などの特殊文字に 0x80 - 0xBF を使用する Windows Latin-1 拡張である Windows-1252 から変換することをお勧めします。ISO-8859-1 が規定されていましたが、MacOS のブラウザでもこれらを理解できます。
変換ライブラリ: @syam によって既に言及されています。
変換
UTF-16 は考慮しないでください。ヘッダーを読み取り、文字セットのメタ ステートメントまでを 1 バイト文字として開始できます。
シングルバイトエンコーディングから UTF-8 への変換は、テーブルを介して行うことができます。たとえば、Java で生成されたもの: const char* table[]
char によってインデックス付けされた a.
table[157] = "\xEF\xBF\xBD";
public static void main(String[] args) {
final String SOURCE_ENCODING = "windows-1252";
byte[] sourceBytes = new byte[1];
System.out.println(" const char* table[] = {");
for (int c = 0; c < 256; ++c) {
String comment = "";
System.out.printf(" /* %3d */ \"", c);
if (32 <= c && c < 127) {
// Pure ASCII
if (c == '\"' || c == '\\')
System.out.print("\\");
System.out.print((char)c);
} else {
if (c == 0) {
comment = " // Unusable";
}
sourceBytes[0] = (byte)c;
try {
byte[] targetBytes = new String(sourceBytes, SOURCE_ENCODING).getBytes("UTF-8");
for (int j = 0; j < targetBytes.length; ++j) {
int b = targetBytes[j] & 0xFF;
System.out.printf("\\x%02X", b);
}
} catch (UnsupportedEncodingException ex) {
comment = " // " + ex.getMessage().replaceAll("\\s+", " "); // No newlines.
}
}
System.out.print("\"");
if (c < 255) {
System.out.print(",");
}
System.out.println();
}
System.out.println(" };");
}