2014-11-13 2 views
0

У меня есть файл, который имеет file.dat CNBC: America¿s Gun: The Rise of the AR–15Как конвертировать специальный символ «Â¿» в UNIX

К сожалению, я получил некоторые специальные символы, которые впадина преобразованы правильно в функции Iconv в UNIX.

$ file -bi file.dat 

text/plain; charset=utf-8 

$ cat file.dat | cut -c14 | od -x 

0000000 bfc2 000a 

0000003 

Не могли бы вы помочь мне преобразовать специальный символ?

Заранее спасибо

-Praveen

ответ

0

Ваш файл в основном хорошо, это в собственно UTF-8 и символ, который вы смотрите на это INVERTED QUESTION MARK (U+00BF) (хотя, кажется, использует некоторое наследие 8- бит, установленный для просмотра файла, а вывод od -x - ориентированный на слова малоконечный, поэтому вы получаете шестнадцатеричный обратный порядок - последовательность 0xC2 0xBF, а не наоборот).

This article объясняет, что, когда Oracle пытается экспортировать неизвестный набор символов, он заменяет символы, которые он не может преобразовать с перевернутыми вопросительными знаками. Поэтому я думаю, вот что произошло здесь. Единственное правильное исправление - вернуться в вашу базу данных Oracle и экспортировать в надлежащем формате, где фигурные апострофы будут представлены (что, я думаю, должно быть на самом деле).

Если файл получен из чужой базы данных Oracle, попросите их снова выполнить экспорт или спросить их, каков должен быть символ, или проигнорировать проблему, или угадать, какой символ поставить там, и использовать ваш редактор. Если есть только несколько проблемных символов, просто сделайте это вручную. Если есть много, может быть, вы можете использовать контекстно-зависимые правила замещения, как

it¿s => it’s 
dog¿s => dog’s 
¿problem¿ => ‘‘problem’’ 
na¿ve => naïve 
¿yri¿ispy¿rykk¿ => äyriäispyörykkä (obviously!) 

Использование ¿ в качестве заполнителя для «я не знаю» проблематично, но Unicode на самом деле имеет решение: REPLACEMENT CHARACTER (U+FFFD). Думаю, вам это не понравится, но единственная действительная (контекстная) замена, которую вы можете выполнить программно, - s/\u{00BF}/\u{FFFD}/g (это псевдокод Perl-ish, но используйте все, что вам нравится).

+0

благодарит за ответ. Но мой источник - это плоский файл, а не база данных оракула. Есть ли способ получить эквивалентную команду unix, чтобы преобразовать ее, как iconv? –

+0

Независимо от того, что созданный этот плоский файл помещает инвертированный знак вопроса. Таким образом, файл в порядке - нет способа вернуть его программно. Если вы можете с уверенностью угадать, каков должен быть символ (кудрявый апостроф?), Используйте свой редактор, чтобы изменить его. – tripleee

+0

Но вы должны настроить среду для UTF-8, чтобы иметь возможность просматривать файл должным образом. – tripleee

Смежные вопросы