- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我使用标准 ofstream 输出文件时,它在 Notepad++ 中显示 ASCII\ANSI 编码,我认为这是正常的,但我在 UCS-2 LE 中需要这个 w/o BOM。我不知道我应该在此代码中更改什么 - 你能帮忙吗?
这是一种消息文件格式 (.vmg),在 UCS-2 LE 中进行字符编码,没有 BOM n 这就是我想在 C++ 中创建的内容。
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
double i,j;
stringstream sstream;
cout<<"Number Start from:";
cin>>i;
cout<<"\nNumber ends in:";
cin>>j;
for(i;i<=j;)
{
sstream <<i<<".vmg";
string ss = sstream.str();
ofstream sout(ss.c_str());
sout<<"BEGIN:VMSG"<<'\n'<<"VERSION:1.1"<<'\n'<<"X-IRMC-STATUS:"<<'\n'<<"X-IRMC-BOX:INBOX"<<'\n'<<"X-NOK-DT:20101224T190106Z"<<'\n'<<"X-MESSAGE-TYPE:SUBMIT"<<'\n'<<"BEGIN:VCARD"<<'\n'<<"VERSION:3.0"<<'\n'<<"N:"<<'\n'<<"TEL:"<<'\n'<<"END:VCARD"<<'\n'<<"BEGIN:VENV"<<'\n'<<"BEGIN:VCARD"<<'\n'<<"VERSION:3.0"<<'\n'<<"N:"<<'\n'<<"TEL:6969"<<'\n'<<"END:VCARD"<<'\n'<<"BEGIN:VENV"<<'\n'<<"BEGIN:VBODY"<<'\n'<<"Date:24.12.2010 19:01:06"<<'\n'<<"bid "<<i<<'\n'<<"END:VBODY"<<'\n'<<"END:VENV"<<'\n'<<"END:VENV"<<'\n'<<"END:VMSG"<<endl;
sstream.str("");
i=i+0.01;
}
return 0;
}
最佳答案
C++ std::string
没有显式编码(它们只是 char
的容器)。
您需要确定几件事:
然后你就会知道如何在两者之间进行转换。
选择固定宽度的内部表示形式很有用,例如 UTF-16
或 UTF-32
(我在技术上知道 UTF-16
不是固定宽度,但 UCS-2
是并且足够接近)。
外部表示不需要固定宽度,但您似乎需要 UCS-2 (UTF-16)。因此,如果您选择一种与外部格式相匹配的内部格式,则不需要转换,您只需将字符串输出到流中即可。
如果您的内部表示和外部表示之间存在差异(如 LE -> BE),您需要在两者之间进行转换。为此,请使用 codecvt
facet 并使用适当的 locale
imbue
文件流。说明可在此处找到:writing-utf16-to-file-in-binary-mode
您知道内部编码(因为您做出了选择)。
外部编码:这取决于文件:
如果您创建了该文件,您就会知道它的编码。如果另一个程序创建了该文件,您可能必须计算出编码。例如通过阅读 BOM
(字节顺序标记)在文件的开头。这样你就可以判断它是 UTF-8
、UTF-16LE
、UTF-16BE
还是 UTF-32
。
如果是其他编码,尝试计算出来可能会比较困难,或者您只能猜测一下。
关于c++ - 在不带 BOM 编码的 UCS-2 LE 中使用标准 ofstream 编写 C++ 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4528380/
我试图弄清楚如何在使用 Apache 给出的示例时简单地排除 BOM。我正在从内部存储读取文件,并首先将其转换为字符串。然后我将其转换为 ByteArray,以便获得 InputStream。然后我使
我想从 Material list 中获取递归数据,但在此之前,我需要找到表之间的关系。我不知道如何获取 BOM 及其子 BOMS(基于下表)。 表格是: 零件:ID(pk)、DefaultBOMID
问题的意思差不多。我发现了很多关于如何在读入文本后去除字节顺序标记的建议,但这似乎是错误的。语言中是否没有一种标准方法可以通过正确识别和处理 BOM 来读取 Unicode 文件? 最佳答案 遇到了同
问题的意思差不多。我发现了很多关于如何在读入文本后去除字节顺序标记的建议,但这似乎是错误的。语言中是否没有一种标准方法可以通过正确识别和处理 BOM 来读取 Unicode 文件? 最佳答案 遇到了同
这里有两个问题。我有一组通常是带有 BOM 的 UTF-8 文件。我想将它们(理想情况下)转换为没有 BOM 的 UTF-8。似乎 codecs.StreamRecoder(stream, encod
首先,介绍一些背景知识:我正在使用 Python 开发 Web 应用程序。我所有的(文本)文件目前都以 UTF-8 格式存储在 BOM 中。这包括我所有的 HTML 模板和 CSS 文件。这些资源作为
我目前有一个 V2 数据工厂,它将带有 BOM 的 UTF-8 编码文件复制到存储位置,我想删除 BOM 作为标准复制事件的一部分。 有办法做到这一点吗? 最佳答案 事实证明,这实际上非常简单。在输出
Jetpack Compose版本:Compose BOM 2023.08.00。使用的Jetpack组合组件(S):基础、材质、动画、实况数据、UI工具、视图模型。Kotlin版本:1.9.10。复
我正在处理 Spring Cloud 契约(Contract)文档,我看到了来自 Spring cloud documentation 的依赖评论。并想知道这究竟是什么 最佳答案 BOM 是 的首字母
这些已经过时了吗?它们似乎是有史以来最糟糕的想法-在您的文件内容中嵌入任何人都看不到的内容,但会影响文件的功能。我不明白为什么我想要一个。 最佳答案 在某些情况下,它们是必需的,是的,因为存在UTF-
我使用的 Javascript 文件是其他 JavaScript 文件的串联。 不幸的是,将这些 JavaScript 文件连接在一起的人在读取文件时没有使用正确的编码,并允许将每个 JavaScri
假设我有一个编码: Encoding enc; 当这个编码被传递给我时,它被设置为发出一个 BOM。我对 BOM 不感兴趣。我系统中的编码是用 header 处理的。 假设编码是不可变的...我想创建
假设我有一个编码: Encoding enc; 当这个编码被传递给我时,它被设置为发出一个 BOM。我对 BOM 不感兴趣。我系统中的编码是用 header 处理的。 假设编码是不可变的...我想创建
我们是一家大公司,拥有大约 2000 个独立的 Java 项目。由于历史原因,我们没有多模块项目,但我们想介绍一下。 从逻辑上讲,我们已经有了项目“组”,即有人负责(比方说)50 个密切相关的项目。这
我在 byte[] byteArray 中有 xml 数据,它可能包含也可能不包含 BOM。 C# 中是否有任何标准方法可以从中删除 BOM?如果不是,处理所有情况(包括所有类型的编码)的最佳方法是什
废话不多说,直接上代码 ? 1
似乎在用于UTF16-LE和UTF-32LE的字节顺序标记之间存在歧义。特别是,请考虑一个包含以下8个字节的文件: FF FE 00 00 00 00 00 00 我怎么知道这个文件是否包含: UTF
有人可以告诉我如何用文件保存字节顺序标记(BOM)吗?例如,我现在保存一个文本文件,如下所示: NSString *currentFileContent = @"This is a string of
我注意到 Kubernetes 客户端的 fabric8.io 有两个以项目和 BOM 结尾的依赖项。 我注意到的唯一区别是它首先有一个分布式版本。同样根据 apache 指南,bom 通常用作项目的
我们有一个多模块项目,所有依赖版本都列在顶层 pom.xml 中。 .有什么方法可以让 Gradle 使用它,而不必将此 bom 安装到本地 maven repo 中? 更具体地说:有一个 pom.x
我是一名优秀的程序员,十分优秀!