相关疑难解决方法(0)

如何使用UTF-8字符串在PHP中使用文件系统函数?

我不能mkdir用来创建UTF-8字符的文件夹:

<?php
$dir_name = "Depósito";
mkdir($dir_name);
?>
Run Code Online (Sandbox Code Playgroud)

当我在Windows资源管理器中浏览此文件夹时,文件夹名称如下所示:

Depósito
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

我正在使用php5

php filesystems directory utf-8 mkdir

33
推荐指数
4
解决办法
4万
查看次数

PHP使用非拉丁文件名检测文件系统编码/保存文件

我需要使用PHP在文件系统上保存带有非拉丁文件名的文件.

我想让这项工作跨平台.我怎么知道我可以使用什么编码来编写文件?我知道许多现代文件系统都是基于UTF-8(这是正确的吗?),但我怀疑Windows XP(例如).

那么,是否有一个强大的检测机制?

php filesystems unicode

8
推荐指数
1
解决办法
2612
查看次数

PHP:如何创建unicode文件名

我正在尝试在文件名中创建带有Unicode字符的文件.我不太清楚我应该使用什么编码,或者它是否可能.

我有这个文件,以latin1编码保存:

$h = fopen("unicode_♫.txt", 'w');
fclose($h);
Run Code Online (Sandbox Code Playgroud)

在UTF-8中,这将解码为'unicode_♫.txt'.它将latin1版本写入磁盘(很明显?).我需要它保存,因为它会出现UTF-8解码.我也试过用UTF-16编码它,但那也不行.

我正在使用PHP 5.2,并希望这与NTFS,ext3和ext4一起使用.

如何才能做到这一点?

php unicode filenames

7
推荐指数
2
解决办法
7931
查看次数

无法将中文字符写入文件名

public static void main(String[] args) throws IOException
{
    Scanner in = new Scanner(System.in);
    String fileName = in.nextLine();

    Writer out = new BufferedWriter(new OutputStreamWriter(
            new FileOutputStream("C:/temp/"+fileName+".txt"), "UTF-8"));//Ex thrown
    out.close();
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个可以处理中文字符到文件名的编写器.所以我可以创建一个名为??.txtexample 的文件.

但是我得到了FileNotFoundException 上面的代码,它对英文字符完全正常,但不适用于汉字.

我按照这里的答案:如何用Java编写UTF-8文件?生成上面的代码,但它不起作用.

任何人都知道如何实现这一目标?

堆栈跟踪:

Exception in thread "main" java.io.FileNotFoundException: C:\temp\??.txt (The filename, directory name, or volume label syntax is incorrect)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

使用NIO:

Path path = Paths.get("C:/temp/"+fileName+".txt");//throws ex
Charset charset = Charset.forName("UTF-8");
Path …
Run Code Online (Sandbox Code Playgroud)

java file internationalization

7
推荐指数
1
解决办法
1459
查看次数

Windows服务器上的PHP7 UTF-8文件名,由ZipArchive引起的新现象

更新:

准备一个错误报告给那些使PHP 7成为可能的伟大人物我再次修改了我的研究,并试图将其简化为几行简单的代码.在这样做时,我发现PHP本身不是问题的原因.我完成后,我会在这里分享我的结果.只是你知道,不要浪费你的时间或东西:)


概要:PHP7现在似乎能够编写UTF-8文件名但无法访问它们?

序言:我在这里阅读了大约10-15篇文章,但是它们并没有帮助我解决问题,它们都比PHP7版本更早.在我看来,这可能是一个新问题,我想知道它是否可能是一个错误.我花了很多时间尝试对字符串进行解码和解码,并试图找到一种方法使其工作 - 无济于事.

大家好日子和来自德国的问候(在这里插入害羞的非母语 - 评论),我希望你能帮助我解决我遇到的这种新现象.从PHP 7开始,它似乎是"新的".

我认为大多数在Windows系统上使用PHP的人都非常熟悉文件名的问题以及PHP的透明包装,它管理对具有非ASCII文件名(或windows-1252或任何系统代码页)的文件的访问.

我不太确定如何处理这个问题,因为你可以看到我在撰写问题方面不是很有经验,所以请不要立刻扯掉我的头.是的,我会努力保持简短.开始了:

第一个症状:更新到PHP7后,我有时会遇到访问我的软件生成的文件的问题.有时它照常工作,有时不工作.我发现不同之处在于PHP7现在似乎能够编写UTF-8文件名但无法访问具有这些名称的文件.

在两个独立的"相同"系统上生成所述文件后(仅在PHP版本中有所不同),这就是在硬盘驱动器上命名文件的方式:

PHP 5.5:Lokaltest_KG_æ¼¢å-_汉-_Krümhold-DEZ1604-140081-complete.zip

PHP 7:Lokaltest_KG_汉字_汉字_Krümhold-DEZ1604-140081-complete.zip

Splendid,PHP 7能够在HDD上编写unicode文件名,而UTF-16则在Windows上使用.现在的缺点是,当我尝试访问这些文件时,例如is_file()PHP 5.5的工作,但PHP 7没有.

考虑一下这段代码片段(注意:我"入侵"了这个函数,因为它是最简单的方法,它不是为此而编写的).生成zip文件后调用此函数,获取客户名称和其他值以确定正确的名称.那些来自数据库.PHP的数据库和内部编码都是UTF-8.clearstatcache本身并不是必要的,但我把它包括在内以使事情更清楚.重要提示:所有发生的事情都是使用PHP7完成的,没有其他实体负责创建zip文件.确切地说,它完成了class ZipArchive.实际上它甚至不是一个zip-archive,重点是文件的文件名和内容是由PHP7创建的 - 成功.

public static function downloadFileAsStream( $file )
{
    clearstatcache();
    print $file . "<br/>";
    var_dump(is_file($file));
    die();
}       
Run Code Online (Sandbox Code Playgroud)

输出是:

D:/htdocs/otm/.data/_tmp/Lokaltest_KG_??_??_Krümhold-DEZ1604-140081-complete.zip
bool(false) 
Run Code Online (Sandbox Code Playgroud)

所以PHP7能够生成文件 - 它们确实存在于硬盘驱动器上并且是合法且可访问的 - 但是无法访问它们.is_file并不是唯一失败的功能,file_exists()例如也是如此.

一个关于编码转换的小实验,让您体验我尝试过的东西:

public static function downloadFileAsStream( $file )
{
    clearstatcache();
    print $file . "<br/>";
    print mb_detect_encoding($file, 'ASCII,UTF-16,windows-1252,UTF-8', false) . …
Run Code Online (Sandbox Code Playgroud)

php windows filenames utf-8 php-7

6
推荐指数
1
解决办法
976
查看次数

无法读取UTF-8文件名

无法从Windows文件系统中读取UTF-8文件名(主要Windows语言为英语)

<?php

$path_to_read = 'D:\music';

class AudioFilterIterator extends FilterIterator
{
    public function accept()
    {
        return (strpos(parent::current(), '.mp3'));
    }
}

$object = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path_to_read));

$iterator = new AudioFilterIterator($object);

echo "<pre>";

$files = array();

foreach($iterator as $file)
{
    echo $file . "\n";
}
Run Code Online (Sandbox Code Playgroud)

所以,例如,我有一个名为"10Hörtauf.mp3"的文件,但作为输出我得到"10 Hort auf.mp3"

我该如何解决?

php

5
推荐指数
1
解决办法
1633
查看次数

php库在windows上提供utf-8文件功能?

我正在开发一个执行大量路径名操作的项目.它在Mac OS X上运行正常,但令我惊讶的是,在Windows 上无法使用utf-8编码字符串调用realpath等函数.这是因为Windows上的setlocale不支持utf-8:

PHP:Windows 7中的setlocale

http://msdn.microsoft.com/en-us/library/x99tb11d.aspx

http://www.phpwact.org/php/i18n/utf-8

我可以创建在内部调用utf8_encodeutf8_decode的包装函数,但是php中有很多文件函数,这给我带来了很大的负担.

此外,该项目是开源的,因此当用户尝试在他们自己的代码中使用我的字符串(所有这些都是面向Web的)来读/写文件时,用户可能会认为它是破坏的.

有没有提供utf-8版本的主要php文件功能的库?我更喜欢扩展名上的自包含目录,以便我可以将其与我的代码捆绑在一起.

我担心如果我找不到像这样的库,那可能是因为我不适合跨平台开发而导致php无法治愈的致命弱点.我也很好奇其他语言如ruby,python和c ++是如何解决这个问题的,如果他们这样做的话.如果没有,这可能只是对Windows的另一次打击,我将不得不找出另一种解决方法.

php windows encoding file utf-8

5
推荐指数
1
解决办法
164
查看次数

file_exists()和file_get_contents()在PHP中名为output <ÕÍÕ¥.txt的文件上失败?

file_exists()并且file_get_contents()在一个名为output‹ÕÍÕ¥.txt(例如)的文件上失败,虽然我知道它存在?

我猜它与文件名中的特殊字符有关?

所以想知道什么是解决方法?

感谢所有回复.

供参考:

请注意,如果您的想法为什么不简单地更改文件名? - 我不能,因为文件名一般是生成的,更改文件名将意味着使用PHP的文件函数(似乎不允许文件名args中的特殊字符 - 除非我误解/误解了任何东西).

我在Windows上使用PHP 5.2.

php windows filesystems encoding utf-8

3
推荐指数
1
解决办法
2337
查看次数