diff -ru piwik.orig/core/DataFiles/SearchEngines.php piwik/core/DataFiles/SearchEngines.php
--- piwik.orig/core/DataFiles/SearchEngines.php	2014-10-21 14:01:34.000000000 +0900
+++ piwik/core/DataFiles/SearchEngines.php	2014-10-22 14:30:30.594805739 +0900
@@ -56,6 +56,8 @@
  */
 if (!isset($GLOBALS['Piwik_SearchEngines'])) {
     $GLOBALS['Piwik_SearchEngines'] = array(
+        // default character code(s) 
+        'default'                        => array('', '', '', array('UTF-8', 'EUC-JP', 'MS932')),
         // 1
         '1.cz'                           => array('1.cz', array('/s\/([^\/]+)/', 'q'), 's/{k}', 'iso-8859-2'),
 
@@ -194,8 +196,8 @@
         'searchatlas.centrum.cz'         => array('Atlas', 'q', '?q={k}'),
 
         // auone
-        'search.auone.jp'                => array('auone', 'q', '?q={k}'),
-        'sp-image.search.auone.jp'       => array('auone Images', 'q', '?q={k}'),
+        'search.auone.jp'                => array('auone', 'q', '?q={k}', array('UTF-8', 'EUC-JP', 'MS932')),
+        'sp-image.search.auone.jp'       => array('auone Images', 'q', '?q={k}', array('UTF-8', 'EUC-JP', 'MS932')),
 
         // Austronaut
         'www2.austronaut.at'             => array('Austronaut', 'q'),
@@ -214,8 +216,8 @@
         'web.gougou.com'                 => array('Baidu', 'search', 'search?search={k}'), // uses baidu search
 
         // Biglobe
-        'cgi.search.biglobe.ne.jp'       => array('Biglobe', 'q', 'cgi-bin/search-st?q={k}'),
-        'images.search.biglobe.ne.jp'    => array('Biglobe Images', 'q', 'cgi-bin/search-st?q={k}'),
+        'cgi.search.biglobe.ne.jp'       => array('Biglobe', 'q', 'cgi-bin/search-st?q={k}', array('UTF-8', 'EUC-JP', 'MS932')),
+        'images.search.biglobe.ne.jp'    => array('Biglobe Images', 'q', 'cgi-bin/search-st?q={k}', array('UTF-8', 'EUC-JP', 'MS932')),
 
         // Bing
         'bing.com'                       => array('Bing', array('q', 'Q'), 'search?q={k}'),
@@ -334,7 +336,7 @@
         'search.excite.es'               => array('Excite'),
         'search.excite.nl'               => array('Excite'),
         'msxml.excite.com'               => array('Excite', '/\/[^\/]+\/ws\/results\/[^\/]+\/([^\/]+)/'),
-        'www.excite.co.jp'               => array('Excite', 'search', 'search.gw?search={k}', 'SHIFT_JIS'),
+        'www.excite.co.jp'               => array('Excite', 'search', 'search.gw?search={k}', array('UTF-8', 'EUC-JP', 'MS932')),
 
         // Exalead
         'www.exalead.fr'                 => array('Exalead', 'q', 'search/results?q={k}'),
@@ -406,11 +408,12 @@
         'www.gomeo.com'                  => array('Gomeo', array('Keywords', '/\/search\/([^\/]+)/'), '/search/{k}'),
 
         // goo
-        'search.goo.ne.jp'               => array('goo', 'MT', 'web.jsp?MT={k}'),
-        'ocnsearch.goo.ne.jp'            => array('goo'),
+        'search.goo.ne.jp'               => array('goo', 'MT', 'web.jsp?MT={k}', array('UTF-8', 'EUC-JP', 'MS932')),
+        'ocnsearch.goo.ne.jp'            => array('goo', '', '', array('UTF-8', 'EUC-JP', 'MS932')),
 
         // Google
         'google.com'                     => array('Google', 'q', 'search?q={k}'),
+        'www.google.co.jp/search'        => array('Google', 'q', 'q={k}', array('UTF-8', 'EUC-JP', 'MS932')),
         'google.{}'                      => array('Google'),
         'www2.google.com'                => array('Google'),
         'ipv6.google.com'                => array('Google'),
@@ -458,9 +461,9 @@
         '{}.wow.com'                     => array('Google'),
         'search.leonardo.it'             => array('Google'),
         'www.optuszoo.com.au'            => array('Google'),
-        'search.dolphin-browser.jp'      => array('Google'),
-        'search.smt.docomo.ne.jp'        => array('Google', 'MT'),
-        'image.search.smt.docomo.ne.jp'  => array('Google', 'MT'),
+        'search.dolphin-browser.jp'      => array('Google', '', '', array('UTF-8', 'EUC-JP', 'MS932')),
+        'search.smt.docomo.ne.jp'        => array('Google', 'MT', '', array('UTF-8', 'EUC-JP', 'MS932')),
+        'image.search.smt.docomo.ne.jp'  => array('Google', 'MT', '', array('UTF-8', 'EUC-JP', 'MS932')),
         'gfsoso.com'                     => array('Google', 'q'),
 
         // Google Earth
@@ -483,6 +486,7 @@
         'google.{}/cse'                  => array('Google Custom Search'),
         'google.com/custom'              => array('Google Custom Search'),
         'google.{}/custom'               => array('Google Custom Search'),
+        'www.google.co.jp/custom'        => array('Google Custom Search', 'q', '', array('UTF-8', 'EUC-JP', 'MS932')),
 
         // Google Translation
         'translate.google.com'           => array('Google Translations', 'q'),
@@ -725,9 +729,9 @@
         'www.neti.ee'                    => array('Neti', 'query', 'cgi-bin/otsing?query={k}', 'iso-8859-1'),
 
         // Nifty
-        'search.nifty.com'               => array('Nifty', array('q', 'Text'), 'websearch/search?q={k}'),
-        'search.azby.fmworld.net'        => array('Nifty'),
-        'videosearch.nifty.com'          => array('Nifty Videos', 'kw', 'search?kw={k}'),
+        'search.nifty.com'               => array('Nifty', array('q', 'Text'), 'websearch/search?q={k}', array('UTF-8', 'EUC-JP', 'MS932')),
+        'search.azby.fmworld.net'        => array('Nifty', '', '', array('UTF-8', 'EUC-JP', 'MS932')),
+        'videosearch.nifty.com'          => array('Nifty Videos', 'kw', 'search?kw={k}', array('UTF-8', 'EUC-JP', 'MS932')),
 
         // Nigma
         'nigma.ru'                       => array('Nigma', 's', 'index.php?s={k}'),
@@ -773,7 +777,7 @@
         'www.qualigo.nl'                 => array('Qualigo'),
 
         // Rakuten
-        'websearch.rakuten.co.jp'        => array('Rakuten', 'qt', 'WebIS?qt={k}'),
+        'websearch.rakuten.co.jp'        => array('Rakuten', 'qt', 'WebIS?qt={k}', array('UTF-8', 'EUC-JP', 'MS932')),
 
         // Rambler
         'nova.rambler.ru'                => array('Rambler', array('query', 'words'), 'search?query={k}'),
@@ -832,11 +836,11 @@
         'search.snap.do'                 => array('Snap.do', 'q', '?q={k}'),
 
         // SeeSaa
-        'search.seesaa.jp'               => array('SeeSaa', '/\/([^\/]+)\/index\.html/', '{k}/index.html'),
+        'search.seesaa.jp'               => array('SeeSaa', '/\/([^\/]+)\/index\.html/', '{k}/index.html', array('UTF-8', 'EUC-JP', 'MS932')),
 
         // So-net
-        'www.so-net.ne.jp'               => array('So-net', 'query', 'search/web/?query={k}'),
-        'video.so-net.ne.jp'             => array('So-net Videos', 'kw', 'search/?kw={k}'),
+        'www.so-net.ne.jp'               => array('So-net', 'query', 'search/web/?query={k}', array('UTF-8', 'EUC-JP', 'MS932')),
+        'video.so-net.ne.jp'             => array('So-net Videos', 'kw', 'search/?kw={k}', array('UTF-8', 'EUC-JP', 'MS932')),
 
         // Sogou
         'www.sogou.com'                  => array('Sogou', 'query', 'web?query={k}', 'gb2312'),
@@ -976,7 +980,7 @@
         'szukaj.wp.pl'                   => array('Wirtualna Polska', 'szukaj', 'http://szukaj.wp.pl/szukaj.html?szukaj={k}'),
 
         // Woopie
-        'www.woopie.jp'                  => array('Woopie', 'kw', 'search?kw={k}'),
+        'www.woopie.jp'                  => array('Woopie', 'kw', 'search?kw={k}', array('UTF-8', 'EUC-JP', 'MS932')),
 
         // WWW
         'search.www.ee'                  => array('www värav', 'query'),
@@ -985,10 +989,10 @@
         'www.x-recherche.com'            => array('X-Recherche', 'MOTS', 'cgi-bin/websearch?MOTS={k}'),
 
         // Yahoo! Japan
-        'search.yahoo.co.jp'             => array('Yahoo! Japan', array('p', 'vp'), 'search?p={k}'),
-        'jp.hao123.com'                  => array('Yahoo! Japan', 'query'),
-        'video.search.yahoo.co.jp'       => array('Yahoo! Japan Videos', 'p', 'search?p={k}'),
-        'image.search.yahoo.co.jp'       => array('Yahoo! Japan Images', 'p', 'search?p={k}'),
+        'search.yahoo.co.jp'             => array('Yahoo! Japan', array('p', 'vp'), 'search?p={k}', array('UTF-8', 'EUC-JP', 'MS932')),
+        'jp.hao123.com'                  => array('Yahoo! Japan', 'query', '', array('UTF-8', 'EUC-JP', 'MS932')),
+        'video.search.yahoo.co.jp'       => array('Yahoo! Japan Videos', 'p', 'search?p={k}', array('UTF-8', 'EUC-JP', 'MS932')),
+        'image.search.yahoo.co.jp'       => array('Yahoo! Japan Images', 'p', 'search?p={k}', array('UTF-8', 'EUC-JP', 'MS932')),
 
         // Yahoo
         'search.yahoo.com'               => array('Yahoo!', array('p', 'q'), 'search?p={k}'),
piwik/core/DataFilesだけに発見: SearchEngines.php.orig
diff -ru piwik.orig/core/UrlHelper.php piwik/core/UrlHelper.php
--- piwik.orig/core/UrlHelper.php	2014-10-21 14:01:34.000000000 +0900
+++ piwik/core/UrlHelper.php	2014-10-22 14:30:30.597805712 +0900
@@ -433,34 +433,32 @@
         }
 
         if (!empty($key)) {
-            if (function_exists('iconv')
-                && isset($searchEngines[$referrerHost][3])
-            ) {
+            if (function_exists('iconv')) {
+                $charsets = !empty($searchEngines[$referrerHost][3]) ? $searchEngines[$referrerHost][3] : (!empty($searchEngines['default'][3]) ? $searchEngines['default'][3] : array('UTF-8', 'EUC-JP', 'MS932'));
                 // accepts string, array, or comma-separated list string in preferred order
-                $charsets = $searchEngines[$referrerHost][3];
                 if (!is_array($charsets)) {
                     $charsets = explode(',', $charsets);
                 }
-
-                if (!empty($charsets)) {
-                    $charset = $charsets[0];
-                    if (count($charsets) > 1
-                        && function_exists('mb_detect_encoding')
-                    ) {
-                        $charset = mb_detect_encoding($key, $charsets);
-                        if ($charset === false) {
-                            $charset = $charsets[0];
-                        }
+                $charset = $charsets[0];
+                if (count($charsets) > 1
+                    && function_exists('mb_detect_encoding')
+                ) {
+                    $charset = mb_detect_encoding($key, $charsets);
+                    if ($charset === false) {
+                        $charset = $charsets[0];
                     }
+                }
 
-                    $newkey = @iconv($charset, 'UTF-8//IGNORE', $key);
-                    if (!empty($newkey)) {
-                        $key = $newkey;
-                    }
+                $newkey = @iconv($charset, 'UTF-8//IGNORE', $key);
+                if (!empty($newkey)) {
+                    $key = $newkey;
+                } else {
+                    $key = "mb_detect_encoding can't recognize character encoding.";
                 }
             }
 
             $key = Common::mb_strtolower($key);
+            Log::debug("searchengine, detected charcode, key = '$searchEngineName', '$charset', '$key'");
         }
 
         return array(
diff -ru piwik.orig/plugins/Actions/Actions/ActionSiteSearch.php piwik/plugins/Actions/Actions/ActionSiteSearch.php
--- piwik.orig/plugins/Actions/Actions/ActionSiteSearch.php	2014-10-21 14:01:34.000000000 +0900
+++ piwik/plugins/Actions/Actions/ActionSiteSearch.php	2014-10-22 14:30:30.601805676 +0900
@@ -180,7 +180,35 @@
         if (is_array($actionName)) {
             $actionName = reset($actionName);
         }
+        Common::printDebug("actionname: " . $actionName);
         $actionName = trim(urldecode($actionName));
+        $searchEngines = Common::getSearchEngineUrls();
+        if (!empty($actionName)) {
+            if (function_exists('iconv')) {
+                // accepts string, array, or comma-separated list string in preferred order
+                $charsets = !empty($searchEngines['default'][3]) ? $searchEngines['default'][3] : array('UTF-8', 'EUC-JP', 'MS932');                
+                if (!is_array($charsets)) {
+                    $charsets = explode(',', $charsets);
+                }
+                $charset = $charsets[0];
+                if (count($charsets) > 1
+                    && function_exists('mb_detect_encoding')
+                ) {
+                    $charset = mb_detect_encoding($actionName, $charsets);
+                    if ($charset === false) {
+                        $charset = $charsets[0];
+                    }
+                }
+
+                $newactionName = @iconv($charset, 'UTF-8//IGNORE', $actionName);
+                if (!empty($newactionName)) {
+                    $actionName = $newactionName;
+                } else {
+                    $actionName = '';
+                }
+                Common::printDebug("detected charcode, actionname = '$charset', '$actionName'");
+            }
+        } 
         if (empty($actionName)) {
             return false;
         }
diff -ru piwik.orig/plugins/Referrers/Columns/Keyword.php piwik/plugins/Referrers/Columns/Keyword.php
--- piwik.orig/plugins/Referrers/Columns/Keyword.php	2014-10-21 14:01:34.000000000 +0900
+++ piwik/plugins/Referrers/Columns/Keyword.php	2014-10-22 14:30:30.605805640 +0900
@@ -47,7 +47,11 @@
         $information = $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite());
 
         if (!empty($information['referer_keyword'])) {
-            return substr($information['referer_keyword'], 0, 255);
+            if (function_exists('mb_substr')) {
+                return mb_substr($information['referer_keyword'], 0, 255, 'UTF-8');
+            } else {  
+                return substr($information['referer_keyword'], 0, 255);
+            }
         }
 
         return $information['referer_keyword'];