Dot-Net

如何檢測使用者的語言環境以獲取正確的 csv 分隔符?

  • March 23, 2020

我有一個簡單的數據轉換工具,它可以產生的輸出之一是 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,選項是為每個語言環境使用不同的分隔符。

引用自:https://stackoverflow.com/questions/8092718