You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Visual Basic读取Unicode格式INI文件中的值?

你的VB Unicode INI读写代码正确性分析 & 完整实现

嘿,我来帮你把这段代码捋清楚,先给你吃个定心丸:你已经写的WritePrivateProfileString部分是完全正确的!

已写部分的正确性说明

你在DllImport里指定了CharSet:=CharSet.Unicode,这会让CLR自动调用kernel32.dll中对应的宽字符版本API(也就是WritePrivateProfileStringW),完美适配Unicode格式的INI文件,这步抓得很准!

补全未完成的GetPrivateProfileString声明

你代码里的GetP...应该是GetPrivateProfileString,它的正确Unicode版本声明如下,我把整个完整的NativeMethods类给你整理好:

Private Class NativeMethods
    ' AJT 2014.11.28 Use the unicode function !!!
    <DllImport("kernel32", CharSet:=CharSet.Unicode, SetLastError:=True)>
    Public Shared Function WritePrivateProfileString(
        section As String,
        key As String,
        val As String,
        filePath As String
    ) As Boolean
    End Function

    ' AJT 2014.11.28 Use the unicode function !!!
    <DllImport("kernel32", CharSet:=CharSet.Unicode, SetLastError:=True)>
    Public Shared Function GetPrivateProfileString(
        section As String,
        key As String,
        defaultValue As String,
        buffer As StringBuilder,
        bufferSize As Integer,
        filePath As String
    ) As Integer
    End Function
End Class

关键注意事项

  • 我给两个API都加上了SetLastError:=True,这样你可以在调用失败后用Marshal.GetLastWin32Error()获取具体的错误码,方便调试
  • Unicode格式的INI文件通常是UTF-16LE编码(带BOM),如果你的INI文件是其他Unicode编码(比如UTF-8),Windows的API可能无法正确识别,建议保存成UTF-16LE格式
  • 调用GetPrivateProfileString时,要确保StringBuilder的缓冲区足够大,返回值是实际读取到的字符数(不含终止符)

简单使用示例

给你写个小例子,演示怎么用这些API读写Unicode INI:

' 写入Unicode INI
Dim iniPath As String = "C:\test_unicode.ini"
NativeMethods.WritePrivateProfileString("用户信息", "昵称", "张三😎", iniPath)

' 读取Unicode INI
Dim sb As New StringBuilder(256)
Dim readLength As Integer = NativeMethods.GetPrivateProfileString("用户信息", "昵称", "默认昵称", sb, sb.Capacity, iniPath)
If readLength > 0 Then
    Console.WriteLine("读取到的昵称:" & sb.ToString())
Else
    Console.WriteLine("读取失败或键不存在")
End If

内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:27:53