Набор символов Latin1 (ISO 8859-1) предназначен для западноевропейских языков и просто не имеет арабских символов. Для получения арабских символов вам потребуется ISO 8859-6. Теперь у вас могут быть кодовые точки в диапазоне 0x00..0xFF, которые являются действительными арабскими символами в 8859-6 и отображаться в качестве европейских акцентированных символов в 8859-1, и вы можете организовать сопоставление значений 8859-6 с UTF8. Нижняя половина диапазона 8859-6 такая же, как 8859-1; это верно для всех наборов кодов 8859-x, и «половина» действительно составляет 5/8, так как кодовые точки 0x80..0x9F являются управляющими кодами.
Символы, определенные в 8859-6, которые не совпадают с 8859-1, начинаются с 0xA0. В наборе 8859-6 имеется множество пробелов.
A0 U+00A0 NO-BREAK SPACE
A4 U+00A4 CURRENCY SIGN
AC U+060C ARABIC COMMA
AD U+00AD SOFT HYPHEN
BB U+061B ARABIC SEMICOLON
BF U+061F ARABIC QUESTION MARK
C1 U+0621 ARABIC LETTER HAMZA
C2 U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE
C3 U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE
C4 U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE
C5 U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW
C6 U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE
C7 U+0627 ARABIC LETTER ALEF
C8 U+0628 ARABIC LETTER BEH
C9 U+0629 ARABIC LETTER TEH MARBUTA
CA U+062A ARABIC LETTER TEH
CB U+062B ARABIC LETTER THEH
CC U+062C ARABIC LETTER JEEM
CD U+062D ARABIC LETTER HAH
CE U+062E ARABIC LETTER KHAH
CF U+062F ARABIC LETTER DAL
D0 U+0630 ARABIC LETTER THAL
D1 U+0631 ARABIC LETTER REH
D2 U+0632 ARABIC LETTER ZAIN
D3 U+0633 ARABIC LETTER SEEN
D4 U+0634 ARABIC LETTER SHEEN
D5 U+0635 ARABIC LETTER SAD
D6 U+0636 ARABIC LETTER DAD
D7 U+0637 ARABIC LETTER TAH
D8 U+0638 ARABIC LETTER ZAH
D9 U+0639 ARABIC LETTER AIN
DA U+063A ARABIC LETTER GHAIN
E0 U+0640 ARABIC TATWEEL
E1 U+0641 ARABIC LETTER FEH
E2 U+0642 ARABIC LETTER QAF
E3 U+0643 ARABIC LETTER KAF
E4 U+0644 ARABIC LETTER LAM
E5 U+0645 ARABIC LETTER MEEM
E6 U+0646 ARABIC LETTER NOON
E7 U+0647 ARABIC LETTER HEH
E8 U+0648 ARABIC LETTER WAW
E9 U+0649 ARABIC LETTER ALEF MAKSURA
EA U+064A ARABIC LETTER YEH
EB U+064B ARABIC FATHATAN
EC U+064C ARABIC DAMMATAN
ED U+064D ARABIC KASRATAN
EE U+064E ARABIC FATHA
EF U+064F ARABIC DAMMA
F0 U+0650 ARABIC KASRA
F1 U+0651 ARABIC SHADDA
F2 U+0652 ARABIC SUKUN
Любой символ в диапазоне 0xA0..0xFF не перечисленных выше не является допустимым арабский символ в 8859-6.
Программа iconv
может, вероятно, обрабатывать преобразование 8859-6 в UTF-8; У меня есть программа, которая тоже может это сделать, и это один файл данных для этой программы. (Он преобразует любой одиночные байты кодового набор, SBCS, к UTF8, при соответствующей таблице.)
См: http://czyborra.com/charsets/iso8859.html#ISO-8859-6 для 8859-6 специфический и http://czyborra.com/charsets/iso8859.html как правило, для получения информации о ISO 8859-х кодовых наборах. Он также имеет ссылки на другие страницы, посвященные различным наборам кода.
Означает ли это, я не могу преобразовать его в любой набор символов, которые могут отображать арабские символы?
Нет; вы можете преобразовать его, но это определенно означает, что вы должны понимать, что, черт возьми, вы подразумеваете под «арабскими символами на латинском языке1», потому что утверждение ничего не значит само по себе - это противоречие в терминах.
Я поставил правдоподобное выражение в вашем заявлении, которое дает содержательную интерпретацию данных, которые у вас есть, но я не могу гарантировать, что это правильная интерпретация.
Вам нужно знать, как были введены данные, что это означает, и решить, как их перевести. Если ваши данные были введены кем-то с использованием 8859-6, но он был сохранен в столбец (таблица, база данных), который предположил, что он равен 8859-1, вы можете извлечь значения, перевести на UTF8 и вставить данные UTF8 в базу данных, которая ожидает UTF8.(На самом деле, поскольку 8859-1 принимает любую произвольную последовательность байтов, вы можете набить UTF8 на столбец 8859-1, отметив, что для каждого арабского символа будет два байта. Это не имеет смысла, поскольку 8859-1 , но он будет точным до тех пор, пока вы ничего не усекаете. Если вы усекаете строку, некоторое время вы разрываете середину символа UTF8, а затем все, что интерпретирует данные как UTF8, будет быть недовольны вами.
См. http://stackoverflow.com/a/17756257/802117 – Ansari
@Ansari Я знаю эту работу, но проблема в том, что я не могу редактировать файл дампа, так как он слишком велик для открытия в любом тексте редактор – sam
использует утилиту вроде sed или что-то делать это программно. – Ansari