Skip to content

Commit 8517b19

Browse files
Use UTF8 to encode and decode strings
1 parent d64976b commit 8517b19

File tree

11 files changed

+21
-22
lines changed

11 files changed

+21
-22
lines changed

Source/Attribute.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ open class Attribute {
2929

3030
let pointer = UnsafeMutablePointer<CChar>.allocate(capacity: count + 1)
3131
H5Aget_name(id, count + 1, pointer)
32-
return String(cString: pointer)
32+
return String(utf8String: pointer)!
3333
}
3434

3535
public var space: Dataspace {

Source/Dataset.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ extension GroupType {
9191
precondition(dataspace.dims.count == chunkDimensions.count)
9292

9393
let plist = H5Pcreate(H5P_CLS_DATASET_CREATE_ID_g)
94+
H5Pset_char_encoding(plist, H5T_CSET_UTF8)
9495
let chunkDimensions64 = chunkDimensions.map({ hsize_t(bitPattern: hssize_t($0)) })
9596
chunkDimensions64.withUnsafeBufferPointer { (pointer) -> Void in
9697
H5Pset_chunk(plist, Int32(chunkDimensions.count), pointer.baseAddress)

Source/Datatype.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public class Datatype : Object, Equatable {
4343
let id: hid_t
4444
if type == String.self {
4545
id = H5Tcopy(H5T_C_S1_g)
46+
H5Tset_cset(id, H5T_CSET_UTF8)
4647
H5Tset_size(id, -1)
4748
} else {
4849
guard let nativeType = NativeType(type: type) else {
@@ -79,6 +80,7 @@ public class Datatype : Object, Equatable {
7980

8081
public class func createString(size: Int = -1) -> Datatype {
8182
let id = H5Tcopy(H5T_C_S1_g)
83+
H5Tset_cset(id, H5T_CSET_UTF8)
8284
let type = Datatype(id: id)
8385
type.size = size
8486
return type

Source/DoubleDataset.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ extension GroupType {
131131
precondition(dataspace.dims.count == chunkDimensions.count)
132132

133133
let plist = H5Pcreate(H5P_CLS_DATASET_CREATE_ID_g)
134+
H5Pset_char_encoding(plist, H5T_CSET_UTF8)
134135
let chunkDimensions64 = chunkDimensions.map({ hsize_t(bitPattern: hssize_t($0)) })
135136
chunkDimensions64.withUnsafeBufferPointer { (pointer) -> Void in
136137
H5Pset_chunk(plist, Int32(chunkDimensions.count), pointer.baseAddress)

Source/FloatDataset.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ extension GroupType {
131131
precondition(dataspace.dims.count == chunkDimensions.count)
132132

133133
let plist = H5Pcreate(H5P_CLS_DATASET_CREATE_ID_g)
134+
H5Pset_char_encoding(plist, H5T_CSET_UTF8)
134135
let chunkDimensions64 = chunkDimensions.map({ hsize_t(bitPattern: hssize_t($0)) })
135136
chunkDimensions64.withUnsafeBufferPointer { (pointer) -> Void in
136137
H5Pset_chunk(plist, Int32(chunkDimensions.count), pointer.baseAddress)

Source/Group.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public class Group: Object, GroupType {
5555
let size = H5Gget_objname_by_idx(id, i, nil, 0)
5656
var name = [Int8](repeating: 0, count: size + 1)
5757
H5Gget_objname_by_idx(id, i, &name, size + 1)
58-
names.append(String(cString: name))
58+
names.append(String(utf8String: name)!)
5959
}
6060

6161
return names

Source/IntDataset.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ extension GroupType {
131131
precondition(dataspace.dims.count == chunkDimensions.count)
132132

133133
let plist = H5Pcreate(H5P_CLS_DATASET_CREATE_ID_g)
134+
H5Pset_char_encoding(plist, H5T_CSET_UTF8)
134135
let chunkDimensions64 = chunkDimensions.map({ hsize_t(bitPattern: hssize_t($0)) })
135136
chunkDimensions64.withUnsafeBufferPointer { (pointer) -> Void in
136137
H5Pset_chunk(plist, Int32(chunkDimensions.count), pointer.baseAddress)

Source/Object.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ open class Object {
3434

3535
let pointer = UnsafeMutablePointer<CChar>.allocate(capacity: count + 1)
3636
H5Iget_name(id, pointer, count + 1)
37-
return String(cString: pointer)
37+
return String(utf8String: pointer)!
3838
}
3939
}
4040

Source/StringAttribute.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ open class StringAttribute: Attribute {
3535

3636
for pointer in data {
3737
if let pointer = pointer {
38-
strings.append(String(cString: pointer))
38+
strings.append(String(utf8String: pointer)!)
3939
} else {
4040
strings.append("")
4141
}
@@ -65,9 +65,9 @@ open class StringAttribute: Attribute {
6565
var index = 0
6666
for _ in 0..<count {
6767
data.withUnsafeBufferPointer { pointer in
68-
let string = String(cString: pointer.baseAddress! + index)
68+
let string = String(utf8String: pointer.baseAddress! + index)!
6969
strings.append(string)
70-
index += string.lengthOfBytes(using: .ascii)
70+
index += string.lengthOfBytes(using: .utf8)
7171
while index <= size && pointer[index] == 0 {
7272
index += 1
7373
}

Source/StringDataset.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public class StringDataset: Dataset {
7979

8080
for pointer in data {
8181
if let pointer = pointer {
82-
strings.append(String(cString: pointer))
82+
strings.append(String(utf8String: pointer)!)
8383
} else {
8484
strings.append("")
8585
}
@@ -100,7 +100,7 @@ public class StringDataset: Dataset {
100100
let stringSize = size / count
101101

102102
// Add one extra null byte per string entry to ensure zero
103-
// padding when parsing to Swift string using String(cString:) below
103+
// padding when parsing to Swift string using String(utf8String:) below
104104
let paddedStringSize = stringSize + 1
105105
let type = Datatype.createString(size: paddedStringSize)
106106

@@ -116,7 +116,7 @@ public class StringDataset: Dataset {
116116
strings.reserveCapacity(count)
117117
for idx in 0..<count {
118118
let index = idx * type.size
119-
let string = String(cString: pointer.baseAddress! + index)
119+
let string = String(utf8String: pointer.baseAddress! + index)!
120120
strings.append(string)
121121
}
122122
return strings
@@ -192,6 +192,7 @@ extension GroupType {
192192
precondition(dataspace.dims.count == chunkDimensions.count)
193193

194194
let plist = H5Pcreate(H5P_CLS_DATASET_CREATE_ID_g)
195+
H5Pset_char_encoding(plist, H5T_CSET_UTF8)
195196
let chunkDimensions64 = chunkDimensions.map({ hsize_t(bitPattern: hssize_t($0)) })
196197
chunkDimensions64.withUnsafeBufferPointer { (pointer) -> Void in
197198
H5Pset_chunk(plist, Int32(chunkDimensions.count), pointer.baseAddress)

0 commit comments

Comments
 (0)