九月=“;”语句破坏了 XSL 生成的 CSV 文件中的 utf8 BOM

2024-03-01

我目前正在使用 XSLT 开发 CSV 导出。在我的例子中,CSV 文件将与 Excel 一起使用 %99%,因此我必须考虑 Excel 的行为。

我的第一个问题是 csv 中的德语特殊字符。即使 CSV 编码是 UTF8,Excel 也无法正确打开 UTF8 的 CSV 文件。特殊字符变得奇怪的符号。我找到了解决这个问题的方法。我刚刚添加了 3 个额外字节(EF BB BF http://en.wikipedia.org/wiki/Byte_order_mark- 又名 BOM 标头) 内容字节的开头。因为 UTF8 BOM 是对 Excel 说“嘿伙计,它是 UTF8,正确打开它”的方式。问题解决了!

我的第二个问题是关于分隔符的。默认分隔符可以是逗号或分号,具体取决于区域。我认为在德国是分号,在英国是逗号。因此,为了防止这个问题,我必须添加以下行:

<xsl:text>sep=;</xsl:text>

or

<xsl:text>sep=,</xsl:text>

(此分隔符未作为硬编码实现)

但我找不到任何解决方案的问题是,如果您添加“sep=;”或“sep=”文件开头,而使用 UT8-BOM 生成 CSV 文件时,BOM 不再有助于正确显示特殊字符!我确信 BOM 字节始终位于字节数组的开头。此屏幕截图来自 Mac OS X 中的 MS Excel:

前 3 个符号属于 BOM 标头。

您是否曾经遇到过这样的问题或者您有什么建议吗?谢谢。

Edit:

我分享打印屏幕。

A。带有 BOM 和 <xsl:text>sep=;</xsl:text>

b.仅需BOM

Java代码:

// Write the bytes
ServletOutputStream out = resp.getOutputStream();
if(contentType.toString().equals("CSV")) {
  // The additional bytes in below is prefix indicates that the content is in UTF-8.
  out.write(239);
  out.write(187);
  out.write(191);
} 
out.write(bytes); // Content bytes, in this case XSL

XSL 代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes" />

    <xsl:template match="/">
    <xsl:text>sep=;</xsl:text>
    <table>
        ...
        </table>
</xsl:template>

您是对的,当有人双击 CSV 文件时,Excel 2007 中无法跨不同区域设置正确加载编码和分隔符。

似乎当你指定sep=在 BOM 之后,它忘记了 BOM 告诉它它是 UTF-8。

您必须指定 BOM,因为在某些区域设置中 Excel 无法检测分隔符。例如,在丹麦语中,默认分隔符是;。如果您输出制表符或逗号分隔的文本,则它不会检测分隔符,而在其他语言环境中,如果您用分号分隔,则不会加载。您可以通过更改 Windows 设置中的区域设置格式来测试这一点 - Excel 然后会选择它。

从这个问题来看:是否可以强制 Excel 自动识别 UTF-8 CSV 文件? https://stackoverflow.com/questions/6002256/is-it-possible-to-force-excel-recognize-utf-8-csv-files-automatically

答案似乎唯一的方法是使用UTF-16 LE编码with BOM.

另请注意,根据http://wiki.scn.sap.com/wiki/display/ABAP/CSV+tests+of+encoding+and+column+separator?original_fqdn=wiki.sdn.sap.com http://wiki.scn.sap.com/wiki/display/ABAP/CSV+tests+of+encoding+and+column+separator?original_fqdn=wiki.sdn.sap.com似乎如果您使用带有制表符分隔符的 utf16-le 那么它就可以工作。

我想知道 Excel 是否读取sep=;然后重新调用获取 CSV 文本的方法并丢失 BOM - 我尝试提供不正确的文本,但找不到任何解决方法来告诉 Excel 同时采用sep和编码。

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

九月=“;”语句破坏了 XSL 生成的 CSV 文件中的 utf8 BOM 的相关文章

随机推荐

  • Java反射带参数的私有方法最好的方法是什么?

    我正在尝试使用java反射调用私有方法我开发了一个小方法来调用其他方法迭代所有方法并按名称和参数类型进行比较我已成功调用4个方法 我有一个问题 1 这是最好的方法吗 因为我知道 class getMethod 仅匹配公共方法 Java有内置
  • 停止 ReSharper 添加注释

    我在我的 C 项目中使用 ReSharper 总的来说我很喜欢它 但是 当我执行某些重构操作时 它会不断向代码添加注释 例如 它添加了 NotNull 当我使用 检查参数是否为空 上下文操作时 Before context action p
  • SQL 连接:选择一对多关系中的最后一条记录

    假设我有一张客户表和一张采购表 每次购买都属于一位客户 我想获得所有客户的列表以及他们最后一次购买的商品SELECT陈述 最佳实践是什么 关于建立索引有什么建议吗 请在您的答案中使用这些表 列名称 顾客 id name 购买 id cust
  • Apache Camel 路由中的 Spring Boot 属性使用

    是否可以在 Apache Camel 路由中使用 Spring Boot 属性 Value 工作正常 但这是否可以直接放置表达式的占位符 Update 我知道 PropertiesComponent 但这将是除了我不喜欢的 Applicat
  • 根据时间/时间表交换 div 可见性

    在我的页面上 我有两个 div 一个 div 我希望从上午 10 点到下午 6 点 服务器时间 可见 而另一个 div 在剩余时间内可见 我尝试了一系列搜索来找到某种 javascript 或 jquery 内容交换器 但没有任何运气 感谢
  • 无法终止容器::尝试终止容器,但未收到退出事件

    我无法停止 删除或终止我的 docker 容器 下面给出的命令及其各自的错误消息 1 docker stop
  • 创建存储过程时是否需要“definer”?

    我已经将所有 MySQL 过程编写为root localhost CREATE DEFINER root localhost PROCEDURE p add user 问题是 当部署到另一台服务器时 我必须替换root与当前用户并替换loc
  • 奇怪的程序集名称从手机访问网站时出错

    我有一个用 Asp net MVC 制作的网站 它安装在共享托管环境的根目录中 现在 我已经在 Asp net MVC 中为该网站制作了一个移动版本 并将其安装为子域http m price tag org http m price tag
  • 有人可以解释 BCrypt 如何验证哈希吗?

    我正在使用 C 和 BCrypt Net 来哈希我的密码 例如 string salt BCrypt Net BCrypt GenerateSalt 6 var hashedPassword BCrypt Net BCrypt HashPa
  • 字符串数组是可变的吗?

    我想知道Java中的字符串数组是否是可变的 我知道字符串是不可变的 但是字符串数组怎么样 如果我有一个字符串数组 并更改内容 是否会创建一个新的字符串对象 或者实际值会改变吗 提前致谢 The Strings 包含在String 确实是不可
  • 从 React Native 中解析的对象数组中渲染图像源

    我正在构建一个反应本机应用程序 它假设使用一些 元数据 对象作为源 我正在解析数组中的每个对象并为每个对象返回一个 JSX 布局item 我遇到的唯一问题是如何提供图像来源 因为我将它们存储在本地并且需要require link 他们 我的
  • React Router - 刷新后保持在同一页面

    我正在学习反应 我有一个包含 4 个子页面的页面 我使用 React Router 来浏览这些页面 除了重新加载页面之外 一切正常 当我从页面 主页 转到 关于 或其他页面时 这是可以的 但是当我刷新页面时 它会再次渲染页面 关于 一秒钟
  • 浏览器关闭时的通知

    我有一个 chrome 扩展 当用户访问特定页面时 它会向用户发送通知 我希望在浏览器关闭或在后台运行时发送通知 类似于智能手机 任何想法或提示都会很棒 在 Chrome 扩展中 您可以使用 2 个工具 chrome gcm API htt
  • 如何在 C# 中获取目录大小(目录中的文件)?

    我希望能够使用 C 获取本地目录之一的大小 我试图避免以下情况 伪代码 尽管在最坏的情况下我将不得不解决这个问题 int GetSize Directory int Size 0 foreach File in Directory File
  • 缩放到点和从点缩放

    我正在尝试将 DisplayObject 缩放到某个点 我认为这很容易 但我现在花了一天时间试图弄清楚 基本上我认为这个should工作 强调应该 newPoint is the point being centered There is
  • 如何将音频文件从 iPhone 文档文件夹上传到服务器

    我正在录制语音并将其保存到iphone文件夹中 但我想将其上传到服务器 那么如何执行此操作 NSString path NSString stringWithFormat Documents wav NSHomeDirectory pati
  • 在 ASP 和 VB 中动态添加文本文件到 DDL

    我希望通过动态更新来更新我的 DDL 功能之一 这样如果用户添加更多文件 下拉列表就会选择它 目前我的下拉列表是从VB代码后面拉出来的 如下所示 Public Sub DDL SelectedIndexChanged sender As O
  • 在 C# 中创建 .csv 文件

    好吧 我想用 C 创建一个 csv 文件 我环顾四周 发现很多人都在使用 system IO memorystream 和 system io streamwriter 问题是这样的 我有一个网络应用程序 我想让用户能够导出到 Excel
  • [Python]为什么电子邮件 pdf 附件在 Outlook/Thunderbird 上不显示,而在 Gmail 上却显示? (从Python环境发送)

    我刚刚加入了一个项目 并一直试图弄清楚为什么某些电子邮件在 Gmail 上按应有的方式显示 但是当我使用 Thunderbird 或 Outlook 等客户端打开时 附加的 PDF 现在会显示 作为附加细节 如果我将邮件从 Thunderb
  • 九月=“;”语句破坏了 XSL 生成的 CSV 文件中的 utf8 BOM

    我目前正在使用 XSLT 开发 CSV 导出 在我的例子中 CSV 文件将与 Excel 一起使用 99 因此我必须考虑 Excel 的行为 我的第一个问题是 csv 中的德语特殊字符 即使 CSV 编码是 UTF8 Excel 也无法正确