使用正确的编码读取文件

2024-01-02

我有一个 txt 文件,如果我使用标准文本编辑器(如记事本或 scite)打开,我可以读取如下字符串:

Artist1 – Title 1
Artist2 – Title 2

然后我用我的 PHP 脚本打开它并阅读以下几行:

$tracklistFile_name=time().rand(1, 1000).".".pathinfo($_FILES['tracklistFile']['name'], PATHINFO_EXTENSION);
if(((pathinfo($tracklistFile_name, PATHINFO_EXTENSION)=='txt')) && (move_uploaded_file($_FILES['tracklistFile']['tmp_name'], 'import/'.$tracklistFile_name))) {
    $fileArray=file('import/'.$tracklistFile_name, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $fileArray=array_values(array_filter($fileArray, "trim"));

    for($i=0; $i<sizeof($fileArray); $i++) {
        echo $fileArray[$i]."<br />";
    }
}

而且...哇...我得到这个结果:

Artist1 � Title1 
Artist2 � Title2 

???那些符号是什么?我认为编码失败。 该符号是如此错误,以至于我无法将它们插入数据库,也无法使用mysql_real_escape_string()。事实上,当我尝试插入它们时,我收到此错误:

Incorrect string value: '\x96 Titl...' for column 'atl' at row 1

我该如何解决这个问题?建议?

EDIT

尝试在插入/添加这些字符串之前添加 utf8_encode() :现在插入不会失败,但结果是:

Artist1  Title1 
Artist2  Title2

所以我丢失了信息。为什么?


你应该阅读Joel Spolsky 关于 UTF-8 和编码的文章 http://www.joelonsoftware.com/articles/Unicode.html.

您的问题几乎肯定源于编码不匹配,您的首要任务是找出发生这种不匹配的位置,您的问题可能出现在很多不同的地方。

1)您的 php 代码可能使用不正确的编码读取输入(如果您尝试以 iso-8859 读取,但源文件以其他方式编码)

2) 您的 php 代码可能使用不正确的编码写入输出

3)无论您使用什么来读取输出(您的浏览器),都可以设置为与您正在写入的字节不同的编码。

一旦您弄清楚这三个地方中的哪一个导致了您的问题,您就可以通过了解您的源编码是什么以及如何使用该源编码而不是其他编码(您的系统可能有这种编码)来读取/写入来解决它设置为默认值)。

编辑:不太了解 php,看起来你可以使用mb_检测_编码 http://php.net/manual/en/function.mb-detect-encoding.php也可能mb 转换编码 http://php.net/manual/en/function.mb-convert-encoding.php.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用正确的编码读取文件 的相关文章

  • Laravel 数据透视表观察者

    我有一个具有更新方法的观察者 观察者ServiceProvider php public function boot Relation observe RelationObserver class 关系观察者 php public func
  • 如何用PHP显示分层的“NESTED SET”数据?

    我试图弄清楚如何使用 php 显示嵌套的 MySQL 数据 我已经设法搁置所有 叶节点 但后来我陷入困境 我需要显示一整棵树及其所有元素的关系 这是表格 category id name lft rgt 1 Saws 1 12 2 Chai
  • AppCache清单错误

    Edit 我不得不删除一些链接 我的清单页面似乎导致我的网页出现错误 当您第一次访问该页面时 所有内容似乎都已成功缓存 但刷新后无法获取存在的文件 我在这里制作了一个快速测试页面来查看 这是我的清单文件 这是一个由 php 和 javasc
  • 无限滚动启用(wordpress)

    因此 我发现本教程可以启用无限滚动 http wptheming com 2012 03 infinite scroll to wordpress theme http wptheming com 2012 03 infinite scro
  • 如何在 PHP 中按字母顺序比较 2 个字符串?

    标题说什么 具体来说 如果我有 array1 name zoo array2 name fox 我怎样才能确定按字母顺序排列 array2的名字应该出现在上面 array1 s Use strcmp http www php net str
  • JS 中的模板?

    我们都喜欢简单 结构化且易于遵守的代码 我们试图在外观和逻辑之间带来差异 例如 在 PHP 中 我们可以使用模板机制 即创建一个带有 php 标签的 html 格式的文件 该文件使用一些预定义的变量 这些变量可以通过逻辑负责任的脚本来使用
  • php-fpm 需要在监狱环境中放置哪些系统文件才能在 ubuntu 上正常运行?

    我在 ubuntu 12 04 上使用 php5 fpm 并且为 nginx 托管的每个域都有单独的池和 chroot 位置 不过 我知道有些系统文件需要直接放在jail中 但是我需要哪些呢 我知道 dns 解析当前不起作用 并且我读过一些
  • 为什么在打开的文件上取消链接成功?

    为什么打开的文件被删除了 在 Windows Xamp 上 我收到消息 仍在工作 但在其他 PHP 服务器上 文件被删除 即使它已打开 并且我收到消息 文件已删除 我也可以从 FTP 删除文件 即使第一个脚本仍在工作 UNIX 系统通常允许
  • php imagecopyresampled 添加黑色背景

    我有一个调整图像大小的脚本 它采用 130x81 图像并将其添加到 130x130 图像中 当 imagecopyresampled 函数运行时 它会在剩余的空间中添加黑色背景 即使基本图像是白色的 下面的代码 我真的很感激一些帮助 The
  • 致命错误:在非对象上调用成员函数 FetchRow()

    这是我的错误消息致命错误 Call to a member function FetchRow on a non object in C AppServ www hfix include care api classes class min
  • 将我的 JSON 字符串格式化为 PHP 中的
      有序列表

    我正在为一个宠物项目开发一个简单的 CMS 我目前有一个 JSON 字符串 其中包含菜单结构的页面 ID 和父页面 ID 的列表 我现在想将此字符串转换为嵌套或分层列表 有序列表 我尝试过循环查找 但似乎最终得到了过于复杂的子类范围 我正在
  • 在 foreach 循环中使用 next

    我正在使用 foreach 循环数组 在特定情况下 我需要在迭代到达下一个元素 如预测 之前知道下一个元素的值 为此 我计划使用该功能next http www php net manual en function next php 在文档
  • 将数组值翻转为数组键的函数? [复制]

    这个问题在这里已经有答案了 有没有一个php函数可以接受下面的数组 array size 4 1 gt string 0 6 gt string 1 7 gt string 1 8 gt string 7 将其翻转到下面的数组 请注意 数组
  • PHP:注意:定义会话变量的索引未定义

    我正在制作一个带有电子邮件验证器的注册系统 您典型的 使用此代码来验证 类型的事情 我希望存储一个会话变量 以便当人们在注册页面上完成帐户注册并意外导航回该页面时 它会提醒他们需要在使用前激活帐户 使这个问题如此难以诊断的原因是我以类似的方
  • SQLite适合并发读吗?

    在没有锁定的情况下 SQLite 数据库的性能是否能达到每秒 50 次读取左右 我正在尝试确定它是否可以在不会经常 写入 的 PHP 网站上使用 它主要是从一小部分表中读取相同的数据 没问题 并发读 写实际上会被 SQLite 序列化 所以
  • 构建、部署、配置和回滚所需的 Jenkins 指南,保留 5 个版本

    我对詹金斯很陌生 有一定的了解 但需要进一步的指导 我在 Git 存储库上有一个 PHP 应用程序 它使用 Composer 具有资产 具有用户上传的媒体文件 使用 Memcache Redis 具有一些代理 工作人员 并且具有迁移文件 到
  • 是否可以倒回 PDO 结果?

    我正在尝试为 PDO 语句的结果编写一个迭代器 但找不到任何回退到第一行的方法 我想避免调用 fetchAll 和存储所有结果数据的开销 first loop works fine foreach statement as result d
  • 在 imagick php 中使用 svg 原始数据生成 SVG 图像

    我正在尝试使用从 Fabric js 获取的 svg 原始数据创建 svg 图像 我使用下面的代码使用 svg 原始数据生成 svg 但它无法正常工作 public function generate svg raw svg prefix
  • 在 Woocommerce 中设置购物车商品价格后重新计算总计

    通过 set price 方法更改产品价格后 如何更改小计价格 现在在review order php中按旧价格计算总成本 cart php foreach WC gt cart gt get cart as cart item key g
  • DocumentBuilder 解析产生无效字节 2 of 4 字节 UTF-8 序列错误

    我正在尝试解析包含字符串的字节数组Impresi n in XML final DocumentBuilderFactory builderFactory DocumentBuilderFactory newInstance final D

随机推荐

  • dplyr 根据向量中的名称改变多列

    我想使用以下方法将两列相乘dplyr s mutate功能 但是我不想为每个变异条件编写一个新行 而是想使用存储在向量中的列的名称var1 and var2 例如 最后我想在现有的bankdata与名字result1其中包含现金列和贷款列相
  • Flash Builder 4.6 - 代码隐藏方法

    我正在尝试找出使用 Flash 构建器用于移动应用程序的 代码隐藏 的正确方法 我正在创建一个 Flex 移动 AIR 项目 基于 选项卡式视图 模板 将我的 UI 设置为设计模式 现在我希望所有逻辑都位于一个单独的类中 该类将相应地改变
  • 我可以假设 C stdlib 函数不使用 errno 吗?

    我正在看一段 C 代码 它的意思是 void printerror char message printf There was an error s n message switch errno do stuff depending on
  • 使用 SolrJ 和 Solr4 进行分面

    我已经浏览过该网站上的相关问题 但尚未找到相关的解决方案 使用以下形式的 HTTP 请求查询我的 Solr4 索引时 facet true facet field country 响应包含所有不同的国家以及每个国家的计数 如何使用 Solr
  • 调试期间未命断点

    为什么 NetBeans Android 1 5 中的断点无法触发 你有一个叫做在其他 IDE 中开发 http developer android com guide developing other ide html它告诉你如何在 ec
  • 在 Linux 上哪里安装 GlassFish?

    免责声明 我对 Linux 还比较陌生 我争论过将其放在 SuperUser 或 ServerFault 上 因为答案does需要将 Linux 作为一个系统进行解释 而不是特定的编程问题 但是我从 Java 开发人员的角度对此感兴趣 并且
  • 如何在 Node.js 中设置 http.createClient 的超时?

    有一个帖子 如何在node js中设置客户端http连接的超时 https stackoverflow com questions 3586760 how do i set a timeout for client http connect
  • 如何获取组中对象的画布相对位置?

    通常一个对象相对于画布的位置可以从它的 left and top属性 但如果对象位于选择 组中 则这些属性将与组相关 有没有办法获得它们相对于画布的位置 当对象位于组内时 其相对于画布的坐标将取决于组的原点 以及对象的原点 假设我们有这段代
  • 使用云台信标设备进行室内定位如何提高数据的稳定性和准确性?

    在android中如何提高多个信标检测的稳定性 我正在使用Gimbal信标进行室内定位 蓝色是否适合室内位置数据访问 我在这方面进行了广泛的研究 因为我在充满会议室的走廊中放置了信标 所有会议室都在附近 首先 我建议将信标放置在天花板上 信
  • 如何在sbt中将jar打包到给定目录?

    在 sbt 中 如果我们执行package 将会生成一个jar文件target scala 2 12 XXX jar 但我想把jar文件放在myDirectory XXX jar 我怎样才能做到这一点 The target 默认路径的一部分
  • 使用 maven-shade-plugin 时出现多余的警告

    我在用Maven 阴影插件对于一个简单的 Maven 项目 该插件成功地将所有依赖项包含到最终的 阴影 jar 中 这个过程每次都很顺利 并且生产出的正是我所需要的 当运行 第一次 时 经过一段时间后clean 该插件很安静并且产生很少的输
  • 如何卸载 Laravel Passport

    我决定使用 JWT 并从项目中完全删除 Laravel Passport 我试图从composer remove laravel passport 然而 这并没有什么好处 Symfony Component Debug Exception
  • Javascript:我需要为对象中的每个变量放置 this.var 吗?

    在我最熟悉的 C 语言中 通常声明一个对象如下 class foo public int bar int getBar return bar Calling getBar 工作正常 忽略这一事实bar可能未初始化 变量bar within
  • Hadoop 中的重新分区

    我的问题主要是理论上的 但我有一些表已经遵循某种分区方案 可以说我的表是按天分区的 但在使用数据一段时间后 我们想修改为月份分区 我可以轻松地重新创建具有新分区定义的表并重新插入数据 这是最好的方法吗 当数据很大时听起来很慢 我看到 hiv
  • CakePHP 2 $this->Html->脚本顺序

    我试图将 JS 文件插入到视图中 但它们插入的顺序错误 在我的 default ctp 中我有这个 this gt Html gt script array https ajax googleapis com ajax libs jquer
  • MySQL 连接、分组依据、排序依据

    我有一个产品表 CREATE TABLE products id INT 以及这些产品的图片表 CREATE TABLE images id INT product id INT default TINYINT 1 我需要选择所有产品 并加
  • javafx如何使用复选框获取表视图中选定的行数据

    在这个项目中 我无法在控制台输出中获取复选框数据是否被选中 My code import java util Arrays import java util Iterator import java util List import jav
  • 在 Linux 上快速连接多个文件

    我正在使用 Python 多重处理为每个进程生成一个临时输出文件 它们的大小可能有几 GB 我制作了几十个 这些临时文件需要连接起来才能形成所需的输出 而这一步被证明是瓶颈 也是并行杀手 是否有一个 Linux 工具可以通过修改文件系统元数
  • WebView 不重新加载具有相同 URL 的页面

    当加载与之前加载过的页面具有相同 url 的页面时 JavaFX 会显示一些奇怪的行为 下面的代码演示了这个问题 类初始化后 加载页面 然后使用自定义样式类将突出显示应用于任意 html 元素 该突出显示已正确呈现 最后 通过用户输入事件
  • 使用正确的编码读取文件

    我有一个 txt 文件 如果我使用标准文本编辑器 如记事本或 scite 打开 我可以读取如下字符串 Artist1 Title 1 Artist2 Title 2 然后我用我的 PHP 脚本打开它并阅读以下几行 tracklistFile