@@ -181,28 +181,36 @@ extension CSVWriter {
181181 var result : [ Unicode . Scalar ]
182182
183183 if field. isEmpty {
184- result = . init( repeating: escapingScalar, count: 2 )
184+ if let escapingScalar = escapingScalar {
185+ result = . init( repeating: escapingScalar, count: 2 )
186+ } else {
187+ result = [ ]
188+ }
185189 } else {
186190 let input : [ Unicode . Scalar ] = . init( field. unicodeScalars)
187191 result = . init( )
188192 result. reserveCapacity ( input. count + 2 )
189- var ( index, needsEscaping) = ( 0 , false )
193+ var index = 0
194+ var needsEscaping : Unicode . Scalar ?
190195
191196 while index < input. endIndex {
192197 let scalar = input [ index]
193198
194199 if scalar == escapingScalar {
195- needsEscaping = true
200+ needsEscaping = scalar
196201 } else if self . isFieldDelimiter ( input, & index, & result) || self . isRowDelimiter ( input, & index, & result) {
197- needsEscaping = true
202+ needsEscaping = scalar
198203 continue
199204 }
200205
201206 index += 1
202207 result. append ( scalar)
203208 }
204209
205- if needsEscaping {
210+ if let needsEscaping = needsEscaping {
211+ guard let escapingScalar = escapingScalar else {
212+ throw Error . unescapedDelimiter ( needsEscaping)
213+ }
206214 result. insert ( escapingScalar, at: result. startIndex)
207215 result. append ( escapingScalar)
208216 }
@@ -220,6 +228,13 @@ extension CSVWriter {
220228}
221229
222230fileprivate extension CSVWriter . Error {
231+ static func unescapedDelimiter( _ delimiter: Unicode . Scalar ) -> CSVError < CSVWriter > {
232+ . init( . invalidInput,
233+ reason: " A field cannot include a delimiter if escaping strategy is disabled. " ,
234+ help: " Remove delimiter from field or set an escaping strategy. " ,
235+ userInfo: [ " Invalid character " : delimiter] )
236+
237+ }
223238 /// Error raised when the a field is trying to be writen and it overflows the expected number of fields per row.
224239 static func fieldOverflow( expectedFields: Int ) -> CSVError < CSVWriter > {
225240 . init( . invalidOperation,
0 commit comments