動作未確認

      $reader = Reader::createFromPath($file[0]->getFileUri(), 'r');

      // 文字コードを判別するために10行程採取
      $inspection = '';
      foreach (range(1, 10) as $i) {
          $row = $reader->fetchOne($i);
          if ($row) {
              $inspection .= implode(',', $row);
          }
      }
      if ($inspection) {
          $csv = file_get_contents($file[0]->getFileUri());
          $encoding = mb_detect_encoding($csv, 'SJIS-win,EUC-JP,UTF-8,WINDOWS-1252,ISO-8859-15,ISO-8859-1,ASCII');
          if (!$encoding) {
          }
          $filter = urlencode('convert.iconv.' . $encoding . '/UTF-8');

          $reader->appendStreamFilter($filter);

      }

php csv import

// goodby/csvの例
      $records = [];
      $config = new LexerConfig();
      $config
          ->setDelimiter(",")
          ->setFromCharset('SJIS-win')
          ->setToCharset('UTF-8') // Customize target encoding. Default value is null, no converting.
      ;
      $lexer = new Lexer($config);
      $interpreter = new Interpreter();
      $interpreter->unstrict(); // Ignore row column count consistency
      $interpreter->addObserver(function(array $row) use (&$records) {
          $records[] = $row;
      });

      $lexer->parse($file_path, $interpreter);
      return $records;

// League\Csvの例
      $reader = Reader::createFromPath($file_path, 'r');
      $filter = urlencode('convert.iconv.SJIS-win/UTF-8');
      $reader->appendStreamFilter($filter);
      return $reader;
  }