原始字符串文字和文件编码
Raw string literals and file codification
c 11介绍了原始字符串文字,对于表示引用字符串,带有许多特殊符号(例如Windows File Paths,Regex Expressions等)的文字非常有用...
std::string path = R"(C:teamworknew_projectproject1)"; // no tab nor newline!
std::string quoted = R"("quoted string")";
std::string expression = R"([w]+[ ]+)";
此原始字符串文字也可以与编码前缀(u8
,u
,U
或L
)结合使用,但是当未指定未指定编码前缀的前缀时,文件编码很重要吗?,让我假设我有此代码:<<<<<<<</p>
auto message = R"(Pick up a card)"; // raw string 1
auto cards = R"( )"; // raw string 2
如果我可以编写和存储上面的代码,则显然我的源代码被编码为Unicode,所以我想知道:
-
raw string 1
是Unicode字面的?(尽管它仅使用ASCII字符),换句话说,RAW字符串是否继承了文件的编码,或者不需要Unicode的编译器自动检测,而不论文件编码如何? - 为了将其视为Unicode文字,或者由于其内容和/或源文件编码吗? ,
raw string 2
上的编码前缀U
是必不可少的。
感谢您的关注。
编辑:
在IDEONE.com中测试上面的代码并打印 message
和 cards
变量的脱角类型,它输出char const*
:
template<typename T> std::string demangle(T t)
{
int status;
char *const name = abi::__cxa_demangle(typeid(T).name(), 0, 0, &status);
std::string result(name);
free(name);
return result;
}
int main()
{
auto message = R"(Pick up a card)";
auto cards = R"( )";
std::cout
<< "message type: " << demangle(message) << 'n'
<< "cards type: " << demangle(cards) << 'n';
return 0;
}
输出:
message type: char const*
cards type: char const*
甚至比我想象的最奇怪,我坚信该类型是wchar_t
(即使没有L
前缀)。
是的,即使是编译您的来源也很重要。如果您使用的是gcc
,则需要使用-finput-charset=UTF-16
之类的单曲来编译(同一件事应适用于VS)。
但是我ihmo,在您的代码中要考虑到更多的基础。例如,std::string
是char
的容器,即1个字节大。例如,如果您要处理UTF-16,则需要2个字节,因此(尽管"手机转换")至少需要wchar_t
(STD :: WSTRING)(或者更安全的char16_t
,在C++11
中更安全。
因此,要使用Unicode,您将需要一个容器和一个准备处理Unicode编码源的编译环境。
原始字符串文字更改逃逸的处理方式,但不要更改编码的处理方式。原始字符串文字仍将其内容从源编码转换为在适当的执行编码中产生字符串。
字符串字体的类型和适当的执行编码完全由前缀确定。仅R
在狭窄的执行编码中总是会产生char
字符串。如果源是UTF-16(并且编译器支持UTF-16作为源编码),则编译器将将字符串文字内容从UTF-16转换为狭窄的执行编码。
- 如何确定我已使用非编码文件到达 EOF?
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 使用文件内容作为硬编码字符串
- C++和带有国家符号的文件路径(也许用 UTF8 编码)
- 当我在 CLion 中读取数组中的 txt 文件时C++编码问题
- 从文件中读取文本时出现编码问题
- 编码大于原始文本:如何获取零和一的字符串并将它们作为实际字节写入文件
- 如何使jse文件执行编码.exe并静默添加启动?Javascript将文件添加到启动?
- 这些PGM文件是如何编码的?
- 算术编码FPAQ0(一个简单的订单-0算术文件压缩机)
- 将 JPG 编码数组从 ROS sensor_msgs/压缩图像保存到 roscpp 中的文件
- 为什么我在有关文件编码格式的QT代码中获得了混乱的代码
- BASE64图像文件用C 编码
- 从编码域中的 MPEG 文件中读取元数据
- 原始字符串文字和文件编码
- 如何在C++中将文件编码格式设置为UTF8
- 文本文件编码方案
- 什么fstream写函数写到文件(编码在post)
- 读取以tiff文件编码的标签
- 将一个文件编码为1/0二进制文件,并在c++中重建原始文件