From 53865b20a53bc5a44025449af01819898b8095d1 Mon Sep 17 00:00:00 2001 From: Al Beano Date: Mon, 4 Jul 2016 21:32:37 +0100 Subject: [PATCH] handle non-ascii strings properly --- MarkovBot/Learning.pm | 3 ++- MarkovBot/MarkovChain.pm | 4 ++++ cpanfile | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/MarkovBot/Learning.pm b/MarkovBot/Learning.pm index 20f25a7..74da0a9 100644 --- a/MarkovBot/Learning.pm +++ b/MarkovBot/Learning.pm @@ -11,6 +11,7 @@ use lib $Bin; use MarkovBot::Config; use MarkovBot::Redis; +use Encode qw(encode); sub learn( $ ) { # input - line to be learned @@ -19,7 +20,7 @@ sub learn( $ ) { my $redis = redis(); my $redis_prefix = config("redis_prefix"); - $_ = shift; + $_ = encode("UTF-8", shift); # learn - add a line of text to the brain $_ = $_." ___end___"; diff --git a/MarkovBot/MarkovChain.pm b/MarkovBot/MarkovChain.pm index 0f5847e..8ea6225 100644 --- a/MarkovBot/MarkovChain.pm +++ b/MarkovBot/MarkovChain.pm @@ -11,14 +11,17 @@ use lib $Bin; use MarkovBot::Config; use MarkovBot::Redis; +use Encode qw(decode encode); sub markov( $ ) { # markov - given two starting words, returns a markov chain result my $redis = redis; my $p = config "redis_prefix"; + my $s = shift; my @s = @{$s}; + @s = map {encode("UTF-8", $_)} @s; if (!$redis->llen("$p:chains:$s[0],$s[1]")) { # Phrase is not known @@ -34,6 +37,7 @@ sub markov( $ ) { } pop @s; + @s = map {decode("UTF-8", $_)} @s; return join " ", @s; } diff --git a/cpanfile b/cpanfile index 92f7816..6fd8e7b 100644 --- a/cpanfile +++ b/cpanfile @@ -5,3 +5,4 @@ requires "Redis" => "0"; requires "YAML::Tiny" => "0"; requires "POE::Component::SSLify" => "0"; requires "Scalar::Util" => "0"; +requires "Encode" => "0";