Organizational Research By

Surprising Reserch Topic

working with japanese filenames in php 5 3 and windows vista using -'php,windows,unicode,utf-8'


working with japanese filenames in php 5 3 and windows vista  using -'php,windows,unicode,utf-8'

I'm currently trying to write a simple script that looks in a folder, and returns a list of all the file names in an RSS feed. However I've hit a major wall... Whenever I try to read filenames with Japanese characters in them, it shows them as ?'s. I've tried the solutions mentioned here: http://stackoverflow.com/questions/482342/php-readdir-problem-with-japanese-language-file-name - however they do not work for some reason, even with:

header('Content-Type: text/html; charset=UTF-8');
setlocale(LC_ALL, 'en_US.UTF8');
mb_internal_encoding("UTF-8");


At the top (Exporting as plain text until I can sort this out).

What can I do? I need this to work and I don't have much time.
    

asked Sep 8, 2015 by rajesh
0 votes
9 views



Related Hot Questions

5 Answers

0 votes
answered Sep 8, 2015 by rajesh
0 votes
This is not possible. It is a limitation of PHP itself. PHP does not use the wide WIN32 API calls, so you're limited by the codepage. UTF-8 (65001) is not valid for this purpose. If you set a breakpoint at readdir_r() in win32\readdir.c, you'll see that FindNextFile already returns a filename with question marks in place of the characters you want, so there's nothing you can do about it, apart from patching PHP itself.
answered Sep 8, 2015 by rajesh
0 votes
This displays Japanese filenames correctly on a Windows server if ($handle = opendir($this->dir)) { while (false !== ($file = readdir($handle))){ $name = mb_convert_encoding($file, "UTF-8", "SJIS-win" ); echo "$name<br>"; } closedir($handle); }
answered Sep 8, 2015 by rajesh
0 votes
function fx_dir_utf8 ($path) { // use this as failback on windows for usual dir listing // give it a UTF-8 path and receive a UTF-8 listing $path = iconv ('UTF-8', 'UTF-16LE', $path); $cmd = 'cmd /U /C dir '. str_replace ('/', '\\', $path); // windows command line returns CP850 or UTF-16LE $dir_str = shell_exec ($cmd); $dir_str = iconv ('UTF-16LE', 'UTF-8', $dir_str); print_r ($dir_str); // further parse $dir_str return ($dir_str); }
answered Sep 8, 2015 by rajesh
0 votes
Yeah, no, as others stated it, PHP CAN'T do it√Ę
answered Sep 8, 2015 by rajesh

...