1. 程式人生 > >NET中判斷一個文字檔案的編碼方式

NET中判斷一個文字檔案的編碼方式

檔案的字符集在Windows下有兩種,一種是ANSI,一種Unicode。
對於Unicode,Windows支援了它的三種編碼方式,一種是小尾編碼(Unicode),一種是大尾編碼(BigEndianUnicode),一種是UTF-8編碼。
我們可以從檔案的頭部來區分一個檔案是屬於哪種編碼。當頭部開始的兩個位元組為 FF FE時,是Unicode的小尾編碼;當頭部的兩個位元組為FE FF時,是Unicode的大尾編碼;當頭部兩個位元組為EF BB時,是Unicode的UTF-8編碼;當它不為這些時,則是ANSI編碼。
按照如上所說,我們可以通過讀取檔案頭的兩個位元組來判斷檔案的編碼格式,程式碼如下(C#程式碼):

程式中System.Text.Encoding.Default是指作業系統的當前 ANSI 內碼表的編碼。

Public Shared Function GetFileEncodeType(ByVal stream As Stream) As Encoding
    Dim buffer() As Byte
    Using br As New BinaryReader(stream)
        buffer = br.ReadBytes(2)
        br.Close()
    End Using
    If buffer(0) >= &HEF Then
        If buffer(0) = &HEF AndAlso buffer(1) = &HBB Then
            Return Encoding.UTF8
        ElseIf buffer(0) = &HFE AndAlso buffer(1) = &HFF Then
            Return Encoding.BigEndianUnicode
        ElseIf buffer(0) = &HFF AndAlso buffer(1) = &HFE Then
            Return Encoding.Unicode
        Else
            Return Encoding.Default
        End If
    Else
        Return Encoding.Default
    End If
End Function


相關推薦

NET判斷一個文字檔案編碼方式

檔案的字符集在Windows下有兩種,一種是ANSI,一種Unicode。 對於Unicode,Windows支援了它的三種編碼方式,一種是小尾編碼(Unicode),一種是大尾編碼(BigEndianUnicode),一種是UTF-8編碼。 我們可以從檔案的頭部來區分一個

java判斷位元組陣列的編碼方式是不是UTF-8

1,用google的工具包,配置maven: <!-- https://mvnrepository.com/artifact/com.googlecode.juniversalchardet/juniversalchardet --> <depende

獲取指定目錄下,指定副檔名的檔案(包含子目錄的),把這些檔案的絕對路徑寫入到一個文字檔案

題目: 獲取指定目錄下,指定副檔名的檔案(包含子目錄中的),把這些檔案的絕對路徑寫入到一個文字檔案中。 思路: 1.必須深度遍歷 2.要在遍歷的過程中進行過濾,將符合條件的內容儲存到容器中 3.對容器中的內容進行遍歷並將絕對路徑寫入到檔案中 程式碼: import java.io

JAVA IO流文字檔案的讀取方式(一)(read 的用法)

JAVA中 IO流文字檔案的讀取方式(read 用法) 首先,我們先用通常的read方法去讀 程式碼 import java.io.FileReader; import java.io.IOException; public class FileReaderd

Java 尋找一個目下的所有“.Java”檔案,並將他們的絕對路徑存到一個文字檔案

import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.FilenameFilter; import java.io.IOExce

編碼實現將一個文字檔案(圖片)從一個地方複製到另一個地方(源路徑到目的路徑可以通過方法引數傳入)

public class MyTest { public static void main(String[] args) { try { test(); } catch (Exception e) { e.printStackTrace(); } } publi

C++判斷一個檔案是否存在的方法

最進在寫的一個系統需要儲存結果資料,但是儲存結果資料的時候,如果那個資料已經存在,就會無法儲存,所以就需要先判斷是否存在該資料,判斷方法如下: #include<iostream> #include<fstream> using namespace

典型的Top K演算法 _找出一個數組裡面前K個最大數_找出1億個浮點數最大的10000個_一個文字檔案,找出前10個經常出現的詞,但這次檔案比較長,說是上億行或十億行,總之無法一次讀入記憶體.

        搜尋引擎會通過日誌檔案把使用者每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度為1-255位元組。         假設目前有一千萬個記錄(這些查詢串的重複度比較高,雖然總數是1千萬,但如果除去重複後,不超過3百萬個。一個查詢串的重複度越高,說明查詢

Java統計一個文字檔案每一行字串出現的次數

需求:現要統計一個文字檔案中每一行字串出現次數 public static HashMap<String, Integer> analysizeFile(File file) { Ha

python判斷一個檔案是否存在

你可以使用os.path.isfile,如果存在,它會返回True.如下: import os.path os.path.isfile(fname) 或者使用os.path.exists: import os.path os.p

Android--判斷文字檔案編碼

方法1:利用windows文字檔案編碼特點。 windows下,Unicode、Unicode big endian和UTF-8編碼的txt檔案的開頭會多出幾個位元組,分別是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、B

java複製文字檔案方式我總結為14種(按字元讀取4,按位元組讀取8種!??)

java中複製檔案的方式 如果按照字元來讀取的話,可以有4種,基本的2種,高效的2種,高效特殊的1種 第0種: public class CopyFileDemo { public static void main(String[] args) throws Except

如何判斷一個txt檔案編碼格式

準備工作:用windows自帶的記事本工具,建立一個檔案,裡面寫幾句話。然後使用另存為按鈕,分別另存為為:ANSI、UTF-8、Unicode、Unicode Big endian四種格式。 主程式如下: 建立一個基於對話方塊的MFC程式,在對話方塊中拖拽一個按鈕,雙擊後新

python 編寫程式,實現新建一個文字檔案,從文字讀取字元

題目 定義一個函式tongji(fname),能實現顯示文字檔案內容,並統計出檔案中所有大寫字母,小寫字母,數字和其他符號的個數的功能。編寫程式,實現新建一個文字檔案,從裡面寫入任意行連續的字元,然後讀取該檔案內容,統計大小寫字母、數字和其他符號的個數。 執行結果示例:

假設一個文字檔案儲存著100個整數,請將這100個整數按從小到大的順序寫到另一個檔案

假設一個文字檔案中儲存著100個整數,請將這100個整數按從小到大的順序寫到另個文字檔案中去,並且在新檔案中每十個整數佔一行,原始檔名和目標檔名通過命令列引數獲取。程式如下: #include <stdio.h> void main(int argc, char

java判斷文字檔案編碼格式

上篇文章需要讀取當前java或者配置檔案的編碼格式,這裡主要支援UTF-8、GBK、UTF-16、Unicode等 /** *

Redis存入存儲的編碼方式不一致解決問題

rds import imp value res div rom 解決辦法 取出   在利用redis緩存的時候,存入的數據與取出的數據編碼方式不一致解決辦法。 from redis import StrictRedis #ecoding = ‘utf-8‘,默認解碼方式

Asp.Net的三種分頁方式總結

rom chang clas 綁定 select proc dll xtend tinc 本人ASP.net初學,網上找了一些分頁的資料,看到這篇文章,沒看到作者在名字,我轉了你的文章,只為我可以用的時候方便查看,2010的文章了,不知道這技術是否過期。 以下才是正文

.NET 如果一個Task A正在await另一個Task B,那麽Task A是什麽狀態

ont inf src inner 新建 就是 代碼 sleep void .NET 中 如果一個Task A正在await另一個Task B,那麽Task A是什麽狀態?答案是:WaitingForActivation 新建一個.NET Core控制臺程序,輸入如

linux修改mysql的字元編碼方式

當發現navicat中建立的資料庫編碼和表編碼都是utf8,但通過web端或者其他方式儲存的資料是亂碼,這時就要考慮是否是安裝mysql時,沒有配置mysql伺服器的編碼格式。 檢查mysql伺服器的編碼格式 1)登入mysql客戶端:mysql -uroot -p 2)查詢