相关疑难解决方法(0)

如何检测文本文件的编码/代码页

在我们的应用中,我们收到的文本文件(.txt,.csv从不同的来源,等等).在阅读时,这些文件有时会包含垃圾,因为文件是在不同的/未知的代码页中创建的.

有没有办法(自动)检测文本文件的代码页?

detectEncodingFromByteOrderMarks,对StreamReader构造,工程UTF8 和其他的Unicode标文件,但是我正在寻找一种方法来检测代码页,像ibm850,windows1252.


谢谢你的回答,这就是我所做的.

我们收到的文件来自最终用户,他们没有关于代码页的线索.接收者也是最终用户,到目前为止,这是他们对代码页的了解:代码页存在,并且令人讨厌.

解:

  • 在记事本中打开收到的文件,查看一段乱码文本.如果有人被称为弗朗索瓦(François)或其他东西,那么凭借你的人类智慧你可以猜到这一点
  • 我创建了一个小应用程序,用户可以使用该应用程序打开文件,并在使用正确的代码页时输入用户知道它将出现在文件中的文本.
  • 遍历所有代码页,并显示提供用户提供的文本解决方案的代码页.
  • 如果弹出一个代码页,请让用户指定更多文本.

.net c# globalization encoding text

292
推荐指数
8
解决办法
29万
查看次数

如何可靠地猜测MacRoman,CP1252,Latin1,UTF-8和ASCII之间的编码

在工作中似乎没有一周没有一些编码相关的conniption,灾难或灾难.这个问题通常来自程序员,他们认为他们可以在不指定编码的情况下可靠地处理"文本"文件.但你不能.

因此,已经决定从此以后禁止文件的名称以*.txt或结尾*.text.我们的想法是,这些扩展误导了偶然程序员对编码的沉闷,这会导致处理不当.没有任何扩展几乎会更好,因为至少你知道你不知道你有什么.

但是,我们并不是那么远.相反,您将需要使用以编码结尾的文件名.因此,对于文本文件,例如,这些会是这样README.ascii,README.latin1,README.utf8,等.

对于需要特定扩展的文件,如果可以在文件本身内部指定编码,例如在Perl或Python中,那么您应该这样做.对于像Java源这样的文件,文件内部不存在这样的工具,你将把编码放在扩展名之前,例如SomeClass-utf8.java.

对于输出,UTF-8是非常优选的.

但是对于输入,我们需要弄清楚如何处理我们的代码库中的数千个文件*.txt.我们想重命名所有这些以符合我们的新标准.但我们不可能全都注意它们.所以我们需要一个真正有效的库或程序.

它们有各种ASCII,ISO-8859-1,UTF-8,Microsoft CP1252或Apple MacRoman.虽然我们知道我们可以判断某些东西是否为ASCII,并且我们知道某些东西是否可能是UTF-8,但我们对8位编码感到困惑.因为我们在混合的Unix环境(Solaris,Linux,Darwin)中运行,大多数桌面都是Mac,所以我们有很多烦人的MacRoman文件.这些尤其是一个问题.

一段时间以来,我一直在寻找一种方法来以编程方式确定哪一个

  1. ASCII
  2. ISO-8859-1
  3. CP1252
  4. 的MacRoman
  5. UTF-8

文件在,我还没有找到一个程序或库,可以可靠地区分这三种不同的8位编码.我们可能单独拥有超过一千个MacRoman文件,因此我们使用的任何字符集检测器都必须能够嗅出它们.我看过的任何东西都无法解决问题.我对ICU字符集检测器库寄予厚望,但它无法处理MacRoman.我也看过模块在Perl和Python中做同样的事情,但一次又一次它总是相同的故事:不支持检测MacRoman.

我正在寻找的是一个现有的库或程序,它可靠地确定文件所在的五种编码中的哪一种 - 并且最好不止于此.特别是它必须区分我引用的三个3位编码,尤其是MacRoman.这些文件的英文文本超过99%; 其他语言中有一些,但并不多.

如果它是库代码,我们的语言首选项是它在Perl,C,Java或Python中,并按此顺序.如果它只是一个程序,那么我们并不关心它是什么语言,只要它是完整的源代码,在Unix上运行,并且完全不受阻碍.

有没有其他人有这个随机编码的遗留文本文件的问题?如果是这样,你是如何尝试解决它的,你有多成功?这是我的问题中最重要的方面,但我也对你是否认为鼓励程序员用这些文件所在的实际编码来命名(或重命名)他们的文件感兴趣,这将有助于我们避免将来出现这个问题.曾经尝试过任何人强制执行该体制的基础上,如果是的话,是成功与否,为什么?

是的,我完全明白为什么鉴于问题的性质,人们无法保证给出明确的答案.对于小文件尤其如此,您没有足够的数据可供使用.幸运的是,我们的文件很少.除随机README文件外,大多数的大小范围为50k到250k,而且许多都更大.任何超过几K的东西都保证是英文的.

问题领域是生物医学文本挖掘,因此我们有时处理广泛且极大的语料库,就像所有PubMedCentral的Open Access资源库一样.一个相当庞大的文件是BioThesaurus 6.0,为5.7千兆字节.这个文件特别烦人,因为它几乎都是UTF-8.但是,我相信,有些numbskull会在其中插入几行8位编码 - 微软CP1252.在你旅行之前需要一段时间.:(

python java macos perl character-encoding

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

如何检查CSV文件的编码

我有一个CSV文件,我希望了解它的编码.Microsoft Excel中是否有一个菜单选项可以帮助我检测它

或者我是否需要使用C#或PHP等编程语言来推断它.

csv encoding

39
推荐指数
7
解决办法
10万
查看次数

如何让git将.strings文件视为文本文件而不是二进制文件

每次我们从不同的分支机构更改.strings文件(用于iOS本地化)时,我们都会遇到冲突.

原因似乎是git将.strings视为二进制文件而不是文本文件.有时它有点烦人,因为git无法自动合并更改,因为它们被认为是二进制格式.

是否有任何git设置会强制它将文件视为文本文件.

我注意到SourceTree和GitLab都无法判断它是文本文件.但XCode本身将能够向我们展示差异.不确定这是否相关.

在此输入图像描述

git

10
推荐指数
3
解决办法
2940
查看次数

Python:UnicodeDecodeError:'utf-8'编解码器无法解码位置35中的字节0x96:无效的起始字节

我是Python的新手,我正在尝试使用下面的脚本读取csv文件.

Past=pd.read_csv("C:/Users/Admin/Desktop/Python/Past.csv",encoding='utf-8')
Run Code Online (Sandbox Code Playgroud)

但是,得到错误"UnicodeDecodeError:'utf-8'编解码器无法解码位置35中的字节0x96:无效的起始字节",请帮我解决这里的问题,我在脚本中使用编码认为它会解决错误.

python csv pandas

8
推荐指数
6
解决办法
3万
查看次数

如何正确确定文本文件的字符编码?

这是我的情况:我需要正确确定哪个字符编码用于给定的文本文件.希望它能正确返回以下类型之一:

enum CHARACTER_ENCODING
{
    ANSI,
    Unicode,
    Unicode_big_endian,
    UTF8_with_BOM,
    UTF8_without_BOM
};
Run Code Online (Sandbox Code Playgroud)

到目前为止,我可以正确地告诉文本文件Unicode,Unicode big endian或者UTF-8 with BOM通过调用以下函数.它还可以正确地确定ANSI给定的文本文件是否最初不是UTF-8 without BOM.问题是,当文本文件是UTF-8 without BOM,以下函数将错误地将其视为ANSI文件.

CHARACTER_ENCODING get_text_file_encoding(const char *filename)
{
    CHARACTER_ENCODING encoding;

    unsigned char uniTxt[] = {0xFF, 0xFE};// Unicode file header
    unsigned char endianTxt[] = {0xFE, 0xFF};// Unicode big endian file header
    unsigned char utf8Txt[] = {0xEF, 0xBB};// UTF_8 file header

    DWORD dwBytesRead = 0;
    HANDLE hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, …
Run Code Online (Sandbox Code Playgroud)

c++ text character-encoding

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

标签 统计

character-encoding ×2

csv ×2

encoding ×2

python ×2

text ×2

.net ×1

c# ×1

c++ ×1

git ×1

globalization ×1

java ×1

macos ×1

pandas ×1

perl ×1