如何檢測使用者的語言環境以獲取正確的 csv 分隔符?
我有一個簡單的數據轉換工具,它可以產生的輸出之一是 csv 文件。
這在英國非常有效,但是當我將它運送給德國客戶時,我遇到了一些問題。具體來說,他們使用 ’
,’ 來表示浮點數中的小數點,反之亦然。這意味著當他們在 excel 中打開他們的數據文件時,至少可以說結果相當混亂 :-)替換正確的字元是微不足道的,但我如何檢測是否應用它?
編輯:
所以這:
a,b,c 1.1,1.2,1.3 "1.1",1,2,"1,3" "this,is,multi- -line",this should be column 2, row 4 a;b;c "a;b","c"..在英國載入到 excel 時看起來像這樣:
+----------------+-----+-----+-----+ | a | b | c | | +----------------+-----+-----+-----+ | 1.1 | 1.2 | 1.3 | | +----------------+-----+-----+-----+ | 1.1 | 1 | 2 | 1,3 | +----------------+-----+-----+-----+ | this,is,multi- | | | | | -line | 2 | 4 | | +----------------+-----+-----+-----+ | a;b;c | | | | +----------------+-----+-----+-----+ | a;b | c | | | +----------------+-----+-----+-----+..但是在德國會發生什麼?
採用:
System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator編寫 CSV:“列表分隔符”字元串應用作 CSV 中的分隔符(請參閱下文了解如何更改此變數)。當另存為 CSV 時,更改“列表分隔符”的值也會反映在 Excel 中。
閱讀 CSV:確定 CSV 中的分隔符是另一回事,它有點複雜。原則上,可以在一個系統中使用“,”作為 CSV 分隔符並使用“;” 甚至是“*”或任何(“字元串”)作為另一個系統上的分隔符:本文提供了一些關於如何檢測讀取跨系統 CSV 文件的 CSV 分隔符的見解:
http://www.codeproject.com/Articles/231582/Auto-detect-CSV-separator.
您還可以通過更改 Windows 中的“列表分隔符”值來對導出器執行一些測試,如下所示(每個 Windows 作業系統可能不同):
- 打開區域和語言對話框。
- 在“格式”選項卡上選擇。
- 點擊“其他設置”
- 編輯“列表分隔符”的值
正如其他人提到的那樣,CSV 通常應該用逗號分隔,欄位應該用雙引號引起來。然而,也有 MS Excel 特定的行為會導致正確的 CSV 文件被錯誤地導入。這是因為 MS Excel 預設使用 Windows 系統中“區域和語言選項”中設置的列表分隔符。對於美國/英國語言環境,它是逗號,但對於德語等語言,它是分號。因此,對於 MS Excel,選項是為每個語言環境使用不同的分隔符。