【发布时间】:2014-06-30 20:29:40
【问题描述】:
我有一个 UTF-8 CSV 文件存储在网络服务器上。当我下载文件时,把它放在我的硬盘上,然后我用这个宏(来自宏记录器)将它导入到 Excel 表中:
Sub Macro2()
Workbooks.OpenText Filename:= _
"C:/myFile.csv", Origin _
:=65001, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _
, Comma:=True, Space:=False, Other:=False
End Sub
所有字符(越南语字符)都正确显示。
当我尝试相同的宏但没有给出文件的本地地址(“C:/myFile.csv”)时,我传递了文件的 URL(“http://myserver.com/myFile.csv”),CSV 被正确导入到我的Excel 工作表,但越南语字符不再正确显示。
我也尝试过使用“数据”选项卡,但 Excel 似乎忽略了编码:
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:/myFile.csv" _
, Destination:=Range("$A$1"))
.Name = "myFile.csv"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 65001
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = "~"
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
样本数据:„; Â; ˜; Â1/4; ‰; ™,™
哪个 Excel 错误读取为:„; Â; ˜; Â1/4; ‰; ™,™;
【问题讨论】:
-
HTTP 标头中通常有编码声明。也许在你的情况下它被设置为另一个字符集并覆盖
Origin参数 -
谢谢,你知道我可以如何更改这些 HTTP 标头吗?
-
取决于服务器。您可以使用 Web 浏览器轻松检查是否是这种情况:在 Firefox 中,您可以激活 Web 控制台,在地址栏中键入 URL 并查看响应标头
Content-type -
这里是内容类型:text/html; charset=UTF-8 所以这不应该是服务器问题吗?谢谢
-
我的测试表明,当文件中没有 Unicode 字节顺序标记时,Excel 会感到困惑。如果有,它会从 URL 正确打开它,在这种情况下,服务器是否在标头中提供 charset=UTF-8 并不重要。