看起来用于UTF16-LE和UTF-32LE的字节顺序标记之间存在歧义.特别是,考虑一个包含以下8个字节的文件:
FF FE 00 00 00 00 00 00
Run Code Online (Sandbox Code Playgroud)
如何判断此文件是否包含:
Unicode BOMs在这里描述:http://unicode.org/faq/utf_bom.html#bom4但是没有讨论这种歧义.我错过了什么吗?
我有一个UTF-16 CSV文件,我必须阅读.Python csv模块似乎不支持UTF-16.
我使用的是python 2.7.2.我需要解析的CSV文件是大量运行到几GB的数据.
John Machin的答案问题如下
print repr(open('test.csv', 'rb').read(100))
Run Code Online (Sandbox Code Playgroud)
输出test.csv只有abc作为内容
'\xff\xfea\x00b\x00c\x00'
Run Code Online (Sandbox Code Playgroud)
我认为csv文件是在美国的Windows机器上创建的.我正在使用Mac OSX Lion.
如果我使用phihag提供的代码和包含一条记录的test.csv.
示例test.csv使用的内容.下面是print repr(open('test.csv','rb').read(1000))输出
'\xff\xfe1\x00,\x002\x00,\x00G\x00,\x00S\x00,\x00H\x00 \x00f\x00\xfc\x00r\x00 \x00e\x00 \x00\x96\x00 \x00m\x00 \x00\x85\x00,\x00,\x00I\x00\r\x00\n\x00'
Run Code Online (Sandbox Code Playgroud)
代码由phihag
import codecs
import csv
with open('test.csv','rb') as f:
sr = codecs.StreamRecoder(f,codecs.getencoder('utf-8'),codecs.getdecoder('utf-8'),codecs.getreader('utf-16'),codecs.getwriter('utf-16'))
for row in csv.reader(sr):
print row
Run Code Online (Sandbox Code Playgroud)
输出上面的代码
['1', '2', 'G', 'S', 'H f\xc3\xbcr e \xc2\x96 m \xc2\x85']
['', '', 'I']
Run Code Online (Sandbox Code Playgroud)
预期产量是
['1', '2', 'G', 'S', 'H f\xc3\xbcr e \xc2\x96 m \xc2\x85','','I']
Run Code Online (Sandbox Code Playgroud) 我必须处理一种文件格式(包括读取和写入),其中字符串以UTF-16编码(每个字符2个字节).由于ASCII表中的字符很少在应用程序域中使用,因此我的C++模型类中的所有字符串都存储在std :: string(UTF-8编码)的实例中.
我正在寻找一个库(在STL和Boost中搜索没有运气)或一组C/C++函数来处理这个std :: string < - > UTF-16转换从加载或保存到文件格式时(实际建模)作为一个字节流)包括代理对的生成/识别和所有那些Unicode的东西(我承认不是专家)...
有什么建议?谢谢!
编辑:忘了提它应该跨平台(Win/Mac),不能使用C++ 11.
我想确定我的vector的哪些元素包含表情符号:
x = c('', 'no', '', '', 'no', '', '?', '??')
x
# [1] "\U0001f602" "no" "\U0001f379" "\U0001f600" "no" "\U0001f61b" "?" "??"
Run Code Online (Sandbox Code Playgroud)
相关帖子只涵盖其他语言,因为大部分都是指专业图书馆,我无法想出一种翻译成R的方法:
第二个看起来很有希望,但唉(不是通过提供固定perl = TRUE):
x[grepl('[\u{1F600}-\u{1F6FF}]', x)]
Run Code Online (Sandbox Code Playgroud)
错误:无效\ u {xxxx}序列(第1行)
类似的问题来自其他问题.我们怎样才能匹配R中的表情符号?
我正在使用sonarqube(版本5.6.7)和声纳扫描仪(版本3.0.3.778)来分析一些文档.在这些文档中,还有.xml和.xsd文件,其中包含了UTF-16.
当我sonar-scanner从命令行启动命令时,使用此配置
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-16
# must be unique in a given SonarQube instance
sonar.projectKey=my:project
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=My project 1
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional …Run Code Online (Sandbox Code Playgroud) 我有一个简单的问题要问.我有一个UTF 16文本文件,以FFFE开头.有哪些C++工具可以处理这种文件?我只是想读它,过滤一些行,并显示结果.
它看起来很简单,但我只是在使用简单的ascci文件时有经验,而且我很着急.我正在使用VS C++,但我不想使用托管C++.
问候
这里放一个非常简单的例子
wifstream file;
file.open("C:\\appLog.txt", ios::in);
wchar_t buffer[2048];
file.seekg(2);
file.getline(buffer, bSize-1);
wprintf(L"%s\n", buffer);
file.close();
Run Code Online (Sandbox Code Playgroud) 我需要为字符串中的每个字符获取ASCII字符.实际上它是(小)文件中的每个字符.以下前3行成功将所有文件的内容拉入字符串(根据此配方):
set fp [open "store_order_create_ddl.sql" r]
set data [read $fp]
close $fp
Run Code Online (Sandbox Code Playgroud)
我相信我正确地辨别出字符的ASCII码(参见http://wiki.tcl.tk/1497).但是我在弄清楚如何遍历字符串中的每个字符时遇到了问题.
首先,我不认为以下是用Tcl循环字符串中的字符的特殊惯用方法.其次,更重要的是,它行为不正确,在每个字符之间插入一个额外的元素.
下面是我编写的代码,用于处理上面"数据"变量集的内容,然后是一些示例输出.
码:
for {set i 0} {$i < [string length $data]} {incr i} {
set char [string index $data $i]
scan $char %c ascii
puts "char: $char (ascii: $ascii)"
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
char: C (ascii: 67)
char: (ascii: 0)
char: R (ascii: 82)
char: (ascii: 0)
char: E (ascii: 69)
char: (ascii: 0)
char: A (ascii: 65)
char: (ascii: 0)
char: T (ascii: …Run Code Online (Sandbox Code Playgroud) 如果我打开一个文件(并直接指定编码):
open(my $file,"<:encoding(UTF-16)","some.file") || die "error $!\n";
while(<$file>) {
print "$_\n";
}
close($file);
Run Code Online (Sandbox Code Playgroud)
我可以很好地阅读文件内容.但是,如果我这样做:
use Encode;
open(my $file,"some.file") || die "error $!\n";
while(<$file>) {
print decode("UTF-16",$_);
}
close($file);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
UTF-16:Unrecognised BOM d at F:/Perl/lib/Encode.pm line 174
Run Code Online (Sandbox Code Playgroud)
我怎样才能使用它decode?
编辑:这是前几个字节:
FF FE 3C 00 68 00 74 00
Run Code Online (Sandbox Code Playgroud) 编者注:此代码示例来自1.0之前的Rust版本,并且不是有效的Rust 1.0代码,但是答案仍然包含有价值的信息。
我想将字符串文字传递给Windows API。许多Windows函数使用UTF-16作为字符串编码,而Rust的本机字符串是UTF-8。
我知道Rust有utf16_units()来生成UTF-16字符迭代器,但是我不知道如何使用该函数来生成UTF-16字符串(最后一个字符为零)。
我正在生成这样的UTF-16字符串,但我确信有更好的方法来生成它:
extern "system" {
pub fn MessageBoxW(hWnd: int, lpText: *const u16, lpCaption: *const u16, uType: uint) -> int;
}
pub fn main() {
let s1 = [
'H' as u16, 'e' as u16, 'l' as u16, 'l' as u16, 'o' as u16, 0 as u16,
];
unsafe {
MessageBoxW(0, s1.as_ptr(), 0 as *const u16, 0);
}
}
Run Code Online (Sandbox Code Playgroud) 在我创建的混合 Android/Cordova 游戏中,我让用户以表情符号 + 字母数字的形式提供标识符 - 即 0..9,A..Z,a..z - 名称。例如
??堆栈溢出
服务器端存储用户标识符时,Emoji 和 Name 部分分开存储,仅 Name 部分需要唯一。游戏不时显示“联赛表”,以便用户可以查看与其他玩家相比他们的表现如何。为此,服务器发回由表情符号、名称和分数组成的十个“高分”值的序列。
然后在一个包含三列的表格中向用户呈现 - 表情符号、名称和分数各一列。这就是我遇到一个小问题的地方。最初我很天真地认为我可以通过简单地查看handle.codePointAt(0). 当我意识到表情符号实际上可以是一个或多个 16 位 Unicode 值的序列时,我将代码更改如下
第 1 部分:剖析用户提供的“句柄”
var i,username,
codepoints = [],
handle = "??StackOverflow",
len = handle,length;
while ((i < len) && (255 < handle.codePointAt(i)))
{codepoints.push(handle.codePointAt(i));i += 2;}
username = handle.substring(codepoints.length + 1);
Run Code Online (Sandbox Code Playgroud)
在这一点上,我有“解剖”句柄
codepoints = [128587, 8205, 65039];
username = 'Stackoverflow;
Run Code Online (Sandbox Code Playgroud)
对上述i += 2和使用的解释说明handle.length。 这篇文章建议