我正在测试我的一些代码如何处理坏数据,我需要一些无效的UTF-8字节序列.
你可以发布一些,理想情况下,解释为什么它们是坏的/你得到它们的地方?
我正在尝试使用Python(只有法语和/或西班牙语字符)读取带有重音字符的CSV文件.基于csvreader的Python 2.5文档(http://docs.python.org/library/csv.html),我提出了以下代码来读取CSV文件,因为csvreader仅支持ASCII.
def unicode_csv_reader(unicode_csv_data, dialect=csv.excel, **kwargs):
# csv.py doesn't do Unicode; encode temporarily as UTF-8:
csv_reader = csv.reader(utf_8_encoder(unicode_csv_data),
dialect=dialect, **kwargs)
for row in csv_reader:
# decode UTF-8 back to Unicode, cell by cell:
yield [unicode(cell, 'utf-8') for cell in row]
def utf_8_encoder(unicode_csv_data):
for line in unicode_csv_data:
yield line.encode('utf-8')
filename = 'output.csv'
reader = unicode_csv_reader(open(filename))
try:
products = []
for field1, field2, field3 in reader:
...
Run Code Online (Sandbox Code Playgroud)
以下是我试图阅读的CSV文件的摘录:
0665000FS10120684,SD1200IS,Appareil photo numérique PowerShot de 10 Mpx de Canon avec trépied (SD1200IS) …Run Code Online (Sandbox Code Playgroud) 出于调试目的,我需要以递归方式在目录中搜索以UTF-8字节顺序标记(BOM)开头的所有文件.我目前的解决方案是一个简单的shell脚本:
find -type f |
while read file
do
if [ "`head -c 3 -- "$file"`" == $'\xef\xbb\xbf' ]
then
echo "found BOM in: $file"
fi
doneRun Code Online (Sandbox Code Playgroud)
或者,如果您喜欢简短,不可读的单行:
find -type f|while read file;do [ "`head -c3 -- "$file"`" == $'\xef\xbb\xbf' ] && echo "found BOM in: $file";doneRun Code Online (Sandbox Code Playgroud)
它不适用于包含换行符的文件名,但无论如何都不会出现这样的文件.
是否有更短或更优雅的解决方案?
文本编辑器是否有任何有趣的文本编辑器或宏?
当我在Sublime Text 3中打开文件时,在底部我可以选择设置字符编码,如屏幕截图所示.

可以选择将其设置为UTF-8,在进行一些研究后意味着没有BOM的UTF-8,但我想将其设置为UTF-8使用BOM如下所示:

我怎样才能从ST3中做到这一点?
我正在压缩JavaScript文件,压缩器抱怨我的文件中有字符.
如何搜索这些字符并将其删除?
我一直在试验各种Java代码试图想出一些东西,它将编码一个包含引号,空格和"奇异"Unicode字符的字符串,并产生与JavaScript的encodeURIComponent函数相同的输出.
我的折磨测试字符串是:"A"B±"
如果我在Firebug中输入以下JavaScript语句:
encodeURIComponent('"A" B ± "');
Run Code Online (Sandbox Code Playgroud)
- 然后我得到:
"%22A%22%20B%20%C2%B1%20%22"
Run Code Online (Sandbox Code Playgroud)
这是我的小测试Java程序:
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class EncodingTest
{
public static void main(String[] args) throws UnsupportedEncodingException
{
String s = "\"A\" B ± \"";
System.out.println("URLEncoder.encode returns "
+ URLEncoder.encode(s, "UTF-8"));
System.out.println("getBytes returns "
+ new String(s.getBytes("UTF-8"), "ISO-8859-1"));
}
}
Run Code Online (Sandbox Code Playgroud)
- 该计划输出:
URLEncoder.encode returns %22A%22+B+%C2%B1+%22 getBytes returns "A" B ± "
关闭,但没有雪茄!使用Java编码UTF-8字符串的最佳方法是什么,以便它产生与JavaScript相同的输出encodeURIComponent?
编辑:我很快就使用Java 1.4迁移到Java 5.
如果UTF-8是8位,这是否意味着最多只能有256个不同的字符?
前128个代码点与ASCII相同.但它说UTF-8可以支持多达百万个字符?
这是如何运作的?
我正在使用Javascript window.atob()函数来解码base64编码的字符串(特别是GitHub API中的base64编码内容).问题是我得到了ASCII编码的字符(â¢而不是™).如何正确处理传入的base64编码流,以便将其解码为utf-8?
utf-8 ×10
unicode ×4
encoding ×2
javascript ×2
php ×2
ascii ×1
csv ×1
decoding ×1
escaping ×1
file ×1
java ×1
python ×1
shell ×1
sublimetext2 ×1
sublimetext3 ×1
text-editor ×1
unit-testing ×1
utf ×1