2009-02-23 5 views
8

Есть ли у кого-нибудь образец кода для программы строк с поддержкой unicode? Язык программирования не имеет значения. Я хочу что-то, что по существу делает то же самое, что и команда unix «строки», но это также работает с текстом в формате Юникод (UTF-16 или UTF-8), вытягивая прогоны символов английского языка и пунктуации. (Меня интересуют только английские персонажи, а не любой другой алфавит).Строки, поддерживаемые Unicode (1)

Спасибо!

+1

Только для английского и UTF-8 строки (1) должны быть в порядке. – mouviciel

+0

Если язык не имеет значения, то почему бы вам не проверить источник самой утилиты строк? –

ответ

8

Вы просто хотите использовать его, или вы почему-то настаиваете на коде?

В моей системе Debian команда strings может сделать это из коробки. См. Исключение из справочной системы:

--encoding=encoding 
     Select the character encoding of the strings that are to be found. Possible values for encoding are: s = single-7-bit-byte characters (ASCII, ISO 8859, 
     etc., default), S = single-8-bit-byte characters, b = 16-bit bigendian, l = 16-bit littleendian, B = 32-bit bigendian, L = 32-bit littleendian. Useful 
     for finding wide character strings. 

Редактировать: ОК. Я не знаю C#, так что это может быть немного волосатым, но в основном вам нужно искать последовательности чередующихся нулей и английских символов.

byte b; 
int i=0; 
while(!endOfInput()) { 
    b=getNextByte(); 
LoopBegin: 
    if(!isEnglish(b)) { 
    if(i>0) // report successful match of length i 
    i=0; 
    continue; 
    } 
    if(endOfInput()) break; 
    if((b=getNextByte())!=0) 
    goto LoopBegin; 
    i++; // found another character 
} 

Это должно работать для малоэтажных.

+0

Мне нужен код ... Мне нужно включить его в систему, которую я пишу (в C#, если это имеет значение). – Evan

+0

Спасибо, именно то, что мне нужно. Довольно очевидно, теперь, когда я думаю об этом; просто пропустите нулевые байты. – Evan

1

У меня была аналогичная проблема, и я попробовал «strings -e ...», но я только что нашел варианты кодировки ширины ширины. (Кодировка UTF-8 - переменная ширина).

Remeber thar по умолчанию символы за пределами ascii необходимо дополнительно strings вариантов. Это включает почти все строки, не относящиеся к английскому языку.

Тем не менее «-e S» (одиночные 8-битовые символы) включает в себя символы UTF-8.

Я написал очень простой (мнимый) сценарий Perl, который применяет «strings -e S ... | iconv ...» к входным файлам.

Я считаю, что это легко настроить для определенных ограничений. Использование: utf8strings [options] file*

#!/usr/bin/perl -s 

our ($all,$windows,$enc); ## use -all ignore the "3 letters word" restriction 
use strict; 
use utf8::all; 

$enc = "ms-ansi" if  $windows; ## 
$enc = "utf8" unless $enc ; ## defaul encoding=utf8 
my $iconv = "iconv -c -f $enc -t utf8 |"; 

for (@ARGV){ s/(.*)/strings -e S '$1'| $iconv/;} 

my $word=qr/[a-zçáéíóúâêôàèìòùüãõ]{3}/i; # adapt this to your case 

while(<>){ 
    # next if /regular expressions for common garbage/; 
    print if ($all or /$word/); 
} 

В некоторых ситуациях такой подход производят некоторый дополнительный мусор.

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