java utf-8帶bom格式內容(帶"\uFEFF")轉換成utf-8格式- 台部落
文章推薦指數: 80 %
java utf-8帶bom格式內容(帶"\uFEFF")轉換成utf-8格式. 原創 HiWorldNice 2020-06-20 04:48. 從txt文件中讀取一串字符串和數據庫中另一串字符串比較的時候發現兩串字符 ...
請輸入正確的登錄賬號或密碼
註冊
忘記密碼
首頁
android
正文
javautf-8帶bom格式內容(帶"\uFEFF")轉換成utf-8格式
原創
HiWorldNice
2020-06-2004:48
從txt文件中讀取一串字符串和數據庫中另一串字符串比較的時候發現兩串字符串一樣,但是判斷是否equal的時候發現返回的是false,也就是不相等。
這就奇怪了,於是打印log,發現了端倪:
左邊的字符串是數據庫的,右邊的字符串是從txt文檔讀取的,發現右邊的字符串前有個小點。
把整個內容複製粘貼出來,發現那個小點又不見了:
E/id===:55cdf761d9c74874b381d24a64cb2766,55cdf761d9c74874b381d24a64cb2766
單獨複製那個小點,用百度搜索,發現什麼也搜不到,空白,只會跳轉到百度首頁。
這就很奇怪了。
把那個小點複製粘貼到編輯器上,還是什麼也沒。
添加雙引號“”再粘貼進去,就出現內容了:
"\uFEFF"
發現這個是文檔編碼格式的問題。
文檔是utf-8帶bom格式,這個是不標準的。
標準的格式是utf-8無bom格式。
什麼是BOM?
BOM(byte-ordermark),即字節順序標記,它是插入到以UTF-8、UTF16或UTF-32編碼Unicode文件開頭的特殊標記,用來識別Unicode文件的編碼類型。
對於UTF-8來說,BOM並不是必須的,因爲BOM是用來標記多字節編碼文件的編碼類型和字節順序(big-endian或little-endian)。
而UTF-8中,每個字符的編碼有多少位是通過第一個字節來表述的,而且沒有big-endian和little-endian的區分。
UTF-8不需要BOM,儘管Unicode標準允許在UTF-8中使用BOM。
所以不含BOM的UTF-8纔是標準形式,在UTF-8文件中放置BOM主要是微軟的習慣(順便提一下:把帶有BOM的小端序UTF-16稱作「Unicode」而又不詳細說明,這也是微軟的習慣)。
BOM是爲UTF-16和UTF-32準備的,用於標記字節序(byteorder)。
微軟在UTF-8中使用BOM是因爲這樣可以把UTF-8和ASCII等編碼明確區分開,否則用Excel打開CSV文件有可能是亂碼的。
但這樣的文件在Windows之外的操作系統裏會帶來問題。
「UTF-8」和「帶BOM的UTF-8」的區別就是有沒有BOM。
即文件開頭有沒有U+FEFF。
UTF-8的網頁代碼不應使用BOM,否則常常會出錯。
當從http的response輸出CSV文件的時候,設置爲utf8的時候默認是不帶
bom的,但是windows的Excel是使用bom來確認utf8編碼的,所有需要把bom寫到文件的開頭。
由此可見如果txt文件格式是utf-8帶bom是不標準的,這樣獲取的字符串可能有問題。
那怎麼處理呢?如果是utf-8帶bom格式,那就把第一個字符去掉,從第二個字符開始截取。
如果是utf-8無bom格式,那麼就從第一個字符開始截取。
代碼如下:
Stringid;
//獲取txt文件內容的id。
後臺導出的txt文件格式爲帶bom的utf-8。
需要判斷第一個字符是否是'\uFEFF'
if(inputTaskItem.substring(0,1).contains("\uFEFF")){//是utf-8帶bom格式
//把第一位去掉,從第二位開始截取。
inputTaskItem爲txt文件內容字符串
id=inputTaskItem.substring(1);
}else{//是utf-8無bom格式
//正常獲取
id=inputTaskItem;
}
經測試,問題解決。
Android
java
發表評論
登录
所有評論
還沒有人評論,想成為第一個評論的人麼?請在上方評論欄輸入並且點擊發布.
相關文章
JAVA運維要掌握哪些常用技能?
熟悉Linux操作系統、shell腳本、內核調優和網絡、jvm等知識;熟悉容器技術及其生態,如Docker、K8S容器平臺及周邊生態,對K8S網絡、存儲、監控和應用編排等;熟悉Ansible、Zabbix、Grafana、ES、Apac
原創
2022-05-0121:17:50
wait()、notify()方法詳解
簡介
wait()、notify()方法可用於控制線程的生命週期
詳解
1、wait()不帶參數
在當前線程中調用A對象的wait()方法,此時當前線程會進入等待狀態,此時當前線程會釋放所持有的鎖資源,等到
原創
2022-04-3014:33:13
IO-輸出流及wirte()方法的理解誤區
簡介
在Java的IO輸出流中,有三個重載的write()方法,它們用於向輸出流所對應的文件中寫入內容,但是如果沒有真正理解輸出流及write()方法的原理,很容易混淆文件寫入時到底是覆蓋還是追加
構造器
這裏以
原創
2022-04-3014:33:05
使用JDBC連接MySql時出現:Theservertimezonevalue'Öйú±ê׼ʱ¼ä'isunrecognized
啓動項目,mysql數據庫使用異常:
Causedby:com.mysql.cj.exceptions.InvalidConnectionAttributeException:Theservertimezonevalue'Ö
原創
2022-04-3014:32:55
使用SimpleDateFormat將毫秒轉換成時分秒格式:HH:mm:ss
publicstaticStringdateFormatFromMilliSecond(longseconds){
//初始化format格式
SimpleDateFormatdateFormat=newSimp
原創
2022-04-3014:32:52
Springboot項目啓動完成後,自動打開瀏覽器的配置
1.增加命令行執行類
[@Component](https://my.oschina.net/u/3907912)
publicclassStartSuccessfulimplementsCommandLineRunner{
原創
2022-04-3014:32:47
高級java面試題(數據庫篇)
數據庫篇
ACID是靠什麼保證的?
原子性是靠undolog日誌來保證的,它記錄了需要回滾的日誌信息,事務回滾時,撤銷已經執行的sql
隔離性是由mvcc(多版本控制)來保證的
持久性是由redolog來保證的,mysql在修改數
原創
2022-04-3014:32:46
Springboot使用@JsonIgnore的坑
springboot項目中使用註解目的com.fasterxml.jackson.annotation.JsonIgnore是想解決返回json的結果不用帶回某個被註解的字段。
這個目的確實能達到了,但是也把一個坑給帶出來了:這哥們是全部
原創
2022-04-3014:32:39
springboot監聽失效redis的key
-在springboot項目中配置監聽redis的失效key:
注入redis消息監聽容器
/**
*Redis消息監聽器容器.
*[@param]redisConnectionFactory
原創
2022-04-3014:32:36
foundcharacter'@'thatcannotstartanytoken.(Donotuse@forindentation)
springboot項目在application.yml加入@[email protected]
如果沒有出現profiles,那麼是在pom中缺少以下配置
原因:同一個依賴在不同的模塊有不同的版本,出現衝突,導致報NoClassFound。
解決方案:通過在根模塊時dependencyManagement標籤來管理版本,子模塊依賴相同的版本時不
原創
2022-04-3014:27:34
EnableConfigurationProperties的實現原理
@EnableConfigurationProperties的實現原理
1、總結
通過spring生命週期的beanPostprocessor接口將對象注入到容器中。
2、分析
2.1EnableConfigurationPropert
原創
2022-04-3014:27:21
整理下自己這些年用過的技術,可能有遺漏,隨時補充
按字母序(用過,精通說不上,每次都能有新感受,問題都能解決)
ab
apicloud
beego
bootstrap
canvas
css/3
composer
consul
docker
easyswoole
echarts
ecmas
原創
2022-04-3014:26:24
FAST協議解析(三)完整一個模板以及解析效率問題
廢話
上一章介紹了兩種解析代碼(流程基本一樣),這次我會將示例的數據一起放出來,並探討一下解析的效率問題。
還有一個需要避坑的點,那邊給的數據文檔,和模板文檔,對於字段的解析會出現對不上然後報錯的問題,例如:一個FAST模板定義爲uInt
原創
2022-04-3014:25:10
H
HiWorldNice
24小時熱門文章
k8s入門之常見問題&命令
鬱金香用C寫一個定時器來循環獲取陽光
一文讀懂MySQL索引
09你這導師太假了,不如換個學術大佬!
高代技巧小記
11導師讓你造航母怎麼辦?
10我可以不用發論文了?
12水論文如何吹一個好故事
這個外包公司太噁心了。
。
進去請三思!
本次秋招最差面試體驗給到華爲!
最新文章
BadTokenException:UnabletoaddwindowToastHandler
SQLiteException:unrecognizedtoken:
ps快速把圖片背景色變成透明圖片
Android自定義EditText密碼框,自定義EditText的hint不顯示問題
javautf-8帶bom格式內容(帶"\uFEFF")轉換成utf-8格式
最新評論文章
[2022]TopRatedCheckPoint156-315.80ExamQuestions
QualifiedWritingServiceinAustraliacanallowstudentstoachievebettergrades
Takeassignmenthelpertoresolvethepaperquerieseasily
UpdatedCompTIADA0-001ExamQuestions(2022)
美國黑金效果和其它速效藥的不同之處
MicrosoftDP-500PDFQuestion[2022]-SecretToPassExamInFirstAttempt-[PremiumDumps]
延伸文章資訊
- 1java: 非法字符: '\ufeff' - 51CTO博客
java: 非法字符: '\ufeff',导入其他代码后,运行显示java:非法字符:'\ufeff'java:需要class,interface或enum原代码可能在编码时使用的编码格式不同,...
- 2java: 非法字符: '\ufeff'_mob604756f2af3b的技术博客
java: 非法字符: '\ufeff',开发工具是IDEA1.解决方法转为GBK再转回为UTF-82.图例...
- 3Error:(1, 1) java: 非法字元: '/ufeff' - 程式人生
Error:(1, 1) java: 非法字元: '/ufeff'. 執行mvn compile也是報同樣的錯誤。感覺好奇怪啊,仔細看看對應的行沒啥問題啊。我用的工具是IntelliJ IDEA...
- 4java: 非法字符: '\ufeff' - 使用D - 博客园
在Idea中启动项目报错:java: 非法字符: '\ufeff',原因时,是由于idea在编译期间字符集乱码。 解决方式如下: 1、在Idea右下角选择对应的编码2、 ...
- 5Error:(1, 1) java: 非法字符: '\ufeff' - 那一叶随风- 博客园
错误原因是UTF-8 文件开头添加了 BOM,IDEA不能正确读取.java 文件从而导致程序出错。 常见引起这个错误的是:用Windows记事本打开并修改.java 文件 ...