[Home]POPFile/V0222jProblem

Amatubu_Wiki | POPFile | RecentChanges | Preferences

Showing revision 3

0.22.2 用の日本語パッチを適用すると分類に失敗することがある問題

問題が発生する環境・条件

問題の詳細

試したこと

問題の解決策(暫定)

問題検証のためのプログラム

スクリプトと同じディレクトリに、shiftjis、jis の混在したテキストファイル「popfilecd.msg」があるという条件で検証。

#!/usr/bin/perl

use strict;
use Encode;
use Encode::Guess;

use Text::Kakasi;

my %encoding_candidates = (
    'Nihongo' => [ 'shiftjis', 'euc-jp', '7bit-jis' ]
);

$Text::Kakasi::HAS_ENCODE = 0;

Text::Kakasi::getopt_argv("kakasi", "-w -ieuc -oeuc");

kakasi_test();

Text::Kakasi::close_kanwadict();



sub kakasi_test {
    my $line;

    open(DB, "./popfilecd.msg");

    while (<DB>) {
        $line = $_;

        $line = convert_encoding( $line, '7bitjis', 'euc-jp', '7bitjis', @{$encoding_candidates{'Nihongo'}} );

        print $line;

        $line = Text::Kakasi::do_kakasi($line);

        print $line;
    }

    close(DB);
}

sub convert_encoding
{
    my ( $string, $from, $to, $default, @candidates ) = @_;

    require Encode;
    require Encode::Guess;

    # First, guess the encoding.

    my $enc = Encode::Guess::guess_encoding( $string, @candidates );

    if(ref $enc){
       $from= $enc->name;
	   print "Guessed encoding : $from\n";
    } else {

        # If guess does not work, check whether $from is valid.

        if (!(Encode::resolve_alias($from))) {

            # Use $default as $from when $from is invalid.

            $from = $default;
        }
    }

    unless ($from eq $to) {
        my ($orig_string) = $string;

        # Workaround for Encode::Unicode error bug.
        eval {
            Encode::from_to($string, $from, $to);
        };
        $string = $orig_string if ($@);
    }
    return $string;
}

Amatubu_Wiki | POPFile | RecentChanges | Preferences
This page is read-only | View other revisions | View current revision
Edited May 31, 2005 12:59 by Amatubu (diff)
Search:

Copyright (c) 1996-2019 naoki iimura e-mail