标签: utf-16

将utf16写入二进制模式的文件

我试图用二进制模式的ofstream写一个wstring文件,但我觉得我做错了.这就是我尝试过的:

ofstream outFile("test.txt", std::ios::out | std::ios::binary);
wstring hello = L"hello";
outFile.write((char *) hello.c_str(), hello.length() * sizeof(wchar_t));
outFile.close();
Run Code Online (Sandbox Code Playgroud)

在例如Firefox中打开test.txt,编码设置为UTF16,它将显示为:

你好

谁能告诉我为什么会这样?

编辑:

在十六进制编辑器中打开文件我得到:

FF FE 68 00 00 00 65 00 00 00 6C 00 00 00 6C 00 00 00 6F 00 00 00 
Run Code Online (Sandbox Code Playgroud)

看起来我出于某种原因在每个角色之间得到两个额外的字节?

c++ unicode utf-16

11
推荐指数
3
解决办法
8973
查看次数

Microsoft如何处理UTF-16在其C++标准库实现中是可变长度编码的事实

标准中间接禁止使用可变长度编码.

所以我有几个问题:

如何处理标准的以下部分?

17.3.2.1.3.3宽字符序列

宽字符序列是一个数组对象(8.3.4)A,可以声明为TA [N],其中T是wchar_t(3.9.1)类型,可选择由const或volatile的任意组合限定.数组的初始元素定义了内容,包括由某个谓词确定的元素.字符序列可以由指定其第一元素的指针值S指定.

NTWCS的长度是终止空宽字符之前的元素数.空NTWCS的长度为零.

问题:

basic_string<wchar_t>

  • 如何operator[]实施以及它返回了什么?
    • 标准: If pos < size(), returns data()[pos]. Otherwise, if pos == size(), the const version returns charT(). Otherwise, the behavior is undefined.
  • size()返回元素的数量还是字符串的长度?
    • 标准: Returns: a count of the number of char-like objects currently in the string.
  • resize()工作怎么样?
    • 与标准无关,它是做什么的
  • 如何在的位置insert(),erase()和其他处理?

cwctype

  • 几乎所有东西都在这里.如何处理变量编码?

cwchar

  • getwchar() 显然无法返回整个平台 - 角色,那么这是如何工作的?

加上所有其余的角色功能(主题是相同的).

编辑:我将打开奖金以获得一些确认.我希望得到一些明确的答案或至少更明确的投票分配.

编辑:这开始变得毫无意义.这充满了完全相互矛盾的答案.你们有些人谈论外部编码(我不关心那些,UTF-8编码仍然会被存储为UTF-16一旦读入字符串,输出相同),其余只是相互矛盾.: - /

c++ utf-16

11
推荐指数
3
解决办法
813
查看次数

Java中的UTF-16编码与C#

我试图读取UTF-16编码方案中的字符串并对其执行MD5散列.但奇怪的是,当我尝试这样做时,Java和C#会返回不同的结果.

以下是Java中的一段代码:

public static void main(String[] args) {
    String str = "preparar mantecado con coca cola";
    try {
        MessageDigest digest = MessageDigest.getInstance("MD5");
        digest.update(str.getBytes("UTF-16"));
        byte[] hash = digest.digest();
        String output = "";
        for(byte b: hash){
            output += Integer.toString( ( b & 0xff ) + 0x100, 16).substring( 1 );
        }
        System.out.println(output);
    } catch (Exception e) {

    }
}
Run Code Online (Sandbox Code Playgroud)

输出为:249ece65145dca34ed310445758e5504

以下是C#中的一段代码:

   public static string GetMD5Hash()
        {
            string input = "preparar mantecado con coca cola";
            System.Security.Cryptography.MD5CryptoServiceProvider x = new …
Run Code Online (Sandbox Code Playgroud)

c# java encoding md5 utf-16

11
推荐指数
2
解决办法
6430
查看次数

Unicode是否具有已定义的最大代码点数?

我已经阅读了很多文章,以便知道Unicode代码点的最大数量是多少,但我没有找到最终答案.

据我所知,Unicode代码点被最小化,使得所有UTF-8 UTF-16和UTF-32编码都能够处理相同数量的代码点.但是这个代码点的数量是多少?

我遇到的最常见的答案是Unicode代码点在0x000000到0x10FFFF(1,114,112代码点)的范围内,但我还在其他地方读过它是1,112,114个代码点.那么要给出一个数字还是比这更复杂的问题?

unicode utf-8 utf-16 codepoint utf-32

11
推荐指数
1
解决办法
9485
查看次数

dos2unix:在第1703行找到的二进制符号0x04

我通过选择Export-> Related files 从OECD http://stats.oecd.org/Index.aspx?datasetcode=CRS1("CRS 2013 data.txt')下载文件.我想在Ubuntu(14.04 LTS)中使用此文件.

当我跑:

dos2unix CRS\ 2013\ data.txt
Run Code Online (Sandbox Code Playgroud)

我知道了:

dos2unix: Binary symbol 0x0004 found at line 1703
dos2unix: Skipping binary file CRS 2013 data.txt
Run Code Online (Sandbox Code Playgroud)

我检查文件的编码:

file --mime-encoding CRS\ 2013\ data.txt
Run Code Online (Sandbox Code Playgroud)

并看到:

CRS 2013 data.txt: utf-16le
Run Code Online (Sandbox Code Playgroud)

我做:

iconv -l | grep utf-16le
Run Code Online (Sandbox Code Playgroud)

这不会返回任何东西,所以我这样做:

iconv -l | grep UTF-16LE
Run Code Online (Sandbox Code Playgroud)

返回:

UTF-16LE//
Run Code Online (Sandbox Code Playgroud)

然后我跑:

iconv --verbose -f UTF-16LE -t UTF-8 CRS\ 2013\ data.txt -o crs_2013_data_temp.txt
Run Code Online (Sandbox Code Playgroud)

并检查:

file --mime-encoding crs_2013_data_temp.txt
Run Code Online (Sandbox Code Playgroud)

并看到:

crs_2013_data_temp.txt: utf-8
Run Code Online (Sandbox Code Playgroud)

然后我尝试:

dos2unix crs_2013_data_temp.txt
Run Code Online (Sandbox Code Playgroud)

得到:

dos2unix: Binary …
Run Code Online (Sandbox Code Playgroud)

byte-order-mark dos2unix utf-16

11
推荐指数
1
解决办法
1万
查看次数

如何在Swift中将字符串转换为unicode(UTF-8)字符串?

如何在Swift中将字符串转换为unicode(UTF-8)字符串?

在目标中我可以像这样写smth:

NSString *str = [[NSString alloc] initWithUTF8String:[strToDecode cStringUsingEncoding:NSUTF8StringEncoding]];
Run Code Online (Sandbox Code Playgroud)

如何在Swift中做类似的smth?

unicode utf-8 utf-16 ios swift

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

如何在PHP中将utf-8字符串转换为utf-16字符串

如何在PHP中将utf-8字符串转换为utf-16字符串?

php utf-8 utf-16

10
推荐指数
1
解决办法
2万
查看次数

是否有将二进制数据打包成UTF-16字符串的标准技术?

(在.NET中)我将任意二进制数据存储在byte [](例如图像)中.现在,我需要将该数据存储在字符串中(遗留API的"注释"字段).是否有将二进制数据打包字符串的标准技术?通过"打包",我的意思是对于任何合理大的随机数据集,bytes.Length/2packed.Length大致相同; 因为两个字节或多或少是一个字符.

这两个"明显"的答案不符合所有标准:

string base64 = System.Convert.ToBase64String(bytes)
Run Code Online (Sandbox Code Playgroud)

没有非常有效地使用字符串,因为它只使用大约60,000个可用的64个字符(我的存储是System.String).一起去

string utf16 = System.Text.Encoding.Unicode.GetString(bytes)
Run Code Online (Sandbox Code Playgroud)

更好地利用字符串,但它不适用于包含无效Unicode字符的数据(例如错误匹配的代理项对). 这篇MSDN文章展示了这种精确(差)技术.

我们来看一个简单的例子:

byte[] bytes = new byte[] { 0x41, 0x00, 0x31, 0x00};
string utf16 = System.Text.Encoding.Unicode.GetString(bytes);
byte[] utf16_bytes = System.Text.Encoding.Unicode.GetBytes(utf16);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,bytesutf16_bytes是相同的,因为原始字节是UTF-16字符串.使用base64编码执行相同的过程会产生16个成员的base64_bytes数组.

现在,使用无效的UTF-16数据重复该过程:

byte[] bytes = new byte[] { 0x41, 0x00, 0x00, 0xD8};
Run Code Online (Sandbox Code Playgroud)

您会发现utf16_bytes与原始数据不匹配.

我编写的代码使用U + FFFD作为无效Unicode字符之前的转义; 它有效,但我想知道是否有一种比我自己制作的更标准的技术.更何况,我不喜欢 …

.net unicode binary encoding utf-16

10
推荐指数
2
解决办法
3077
查看次数

如何选择代理区(UTF-16)的位置?

UTF-16代理区域(U + D800..U + DFFF)的位置是随机选择还是有一些逻辑上的原因,它是在这个地方?

unicode utf-16

10
推荐指数
1
解决办法
263
查看次数

如何让Emacs的Mx rgrep兼容UTF8和UTF16文件?

是否可以自定义Emacs以便rgrep在UTF8(甚至拉丁文)和UTF16文件中正确查找某些模式的出现?

我想我们应该定制grep-find-template,但不能通过它.

编辑2017-06-16 我现在有一个为shell 工作utf-8/16 cat命令的例子.grep如果可能的话,它应该转换为Emacs的.这里是:

cat $1 | ( [[ $(file -i $1) =~ utf-16be ]] && ( iconv -f UTF-16 -t UTF-8 || true ) || cat )
Run Code Online (Sandbox Code Playgroud)

emacs utf-8 utf-16

10
推荐指数
0
解决办法
144
查看次数

标签 统计

utf-16 ×10

unicode ×5

utf-8 ×4

c++ ×2

encoding ×2

.net ×1

binary ×1

byte-order-mark ×1

c# ×1

codepoint ×1

dos2unix ×1

emacs ×1

ios ×1

java ×1

md5 ×1

php ×1

swift ×1

utf-32 ×1